Ответ 1
Вы должны установить фон Canvas
на null
(или просто нет фона, null
по умолчанию). Transparent
является "видимым" для щелчков мыши.
Я хочу создать настраиваемый элемент управления, который будет использоваться как оверлей. Элемент управления должен содержать пару дочерних элементов управления, которые должны быть нарисованы и должны быть интерактивными, как обычно. Но все остальное в контроле должно быть прозрачным и "кликабельным".
Вот как я пытаюсь добиться этого... Во-первых, я использую события 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, все события туннелирования прекратятся в пользовательском элементе управления, и кнопка станет непривлекательной.
Каков правильный способ достижения такого поведения? Можно ли сделать это без подкласса холста (или любой другой панели)?
Вы должны установить фон Canvas
на null
(или просто нет фона, null
по умолчанию). Transparent
является "видимым" для щелчков мыши.