WPF: Как сделать оверлейный элемент управления с прозрачным холстом и кликабельными дочерними элементами

Я хочу сделать пользовательский элемент управления, который будет использоваться как оверлей. Элемент управления должен содержать пару дочерних элементов управления, которые должны рисоваться и быть кликабельными, как обычно. Но все остальное в элементе управления должно быть прозрачным и "кликабельным насквозь".

Вот как я пытаюсь этого добиться... Во-первых, я использую события PreviewMouseDown\Up\Move в окне, где будет размещен оверлей. Я хочу, чтобы эти события "проходили" через прозрачную часть моего пользовательского элемента управления, но останавливались на непрозрачной (например, на моей кнопке). Во-вторых, вот xaml для моего элемента управления (корневой узел UserControl остался нетронутым):

<Canvas Background="transparent" IsHitTestVisible="true">
     <Button Canvas.Left="384" Canvas.Top="34" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" IsHitTestVisible="True" />
     <TextBlock Canvas.Left="27" Canvas.Top="105" Height="36" Name="textBlock1" Text="TextBlock" Width="432" FontSize="24" IsHitTestVisible="False" Foreground="Red" FontWeight="Bold" />
</Canvas>

Однако если я установлю для Canvas' IsHitTestVisible значение false, то весь элемент управления, включая кнопку, становится "непотопляемым". Если установить значение true, то все события туннелирования останавливаются на пользовательском элементе управления, и кнопка становится некликабельной.

Каков правильный способ добиться такого поведения? Возможно ли это сделать без подклассификации canvas (или любой другой панели)?

14
задан Pavel Murygin 20 October 2011 в 23:51
поделиться