WPF:如何使用透明画布和可点击的子画面进行叠加控制

Pav*_*gin 14 wpf overlay custom-controls transparent hittest

我想制作一个自定义控件,用作叠加层.该控件应包含一些应该绘制的子控件,并且应该像往常一样可以单击.但控件中的其他所有内容都应该是透明的并且"可点击".

以下是我尝试实现此目的的方法......首先,我在将要放置叠加层的窗口中使用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>
Run Code Online (Sandbox Code Playgroud)

但是,如果我将Canvas的IsHitTestVisible设置为false,则包括按钮在内的整个控件将变为"unhittable".如果将其设置为true,则所有隧道事件都将停止在自定义控件上,并且按钮将变为不可点击.

实现这种行为的正确方法是什么?是否可以在没有子画布画布(或任何其他面板)的情况下这样做?

Vla*_*lad 20

你应该设置Canvasto 的背景null(或者只是没有背景,null是默认的).Transparent对鼠标点击是"可见的".