Подтвердить что ты не робот

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

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

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

<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, весь элемент управления, включая кнопку, становится "unhittable". Если установить его в true, все события туннелирования прекратятся в пользовательском элементе управления, и кнопка станет непривлекательной.

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

4b9b3361

Ответ 1

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