WPF: Как создать оверлейный элемент управления с прозрачным холстом и кликабельным дочерним элементом - PullRequest
14 голосов
/ 21 октября 2011

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

Вот как я пытаюсь добиться этого ... Во-первых, я использую события 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 (или любой другой панели)?

1 Ответ

20 голосов
/ 21 октября 2011

Вы должны установить фон Canvas на null (или просто нет фона, null по умолчанию). Transparent «виден» щелчкам мыши.

...