我想制作一个自定义控件,用作叠加层。该控件应包含一些应该绘制的子控件,并且应该像往常一样可以单击。但控件中的其他所有内容都应该是透明的,并且“可点击”。
以下是我尝试实现此目的的方法......首先,我在将要放置叠加层的窗口中使用PreviewMouseDown \ Up \ Move事件。我希望这些事件“通过”我的自定义控件的透明部分,但停止在不透明(例如在我的按钮)。其次,这是我的控件的xaml(root 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,则整个控件包括按钮变为“unhittable”。如果将其设置为true,则所有隧道事件都将停止在自定义控件上,并且按钮将变为不可点击。
实现这种行为的正确方法是什么? 是否可以在没有子画布(或任何其他面板)的情况下这样做?
答案 0 :(得分:20)
您应该将Canvas
的背景设置为null
(或者只是背景,默认为null
)。 Transparent
对鼠标点击是“可见的”。