WPF:如何使用透明画布和可单击子项制作覆盖控件

发布于 2024-12-11 03:35:43 字数 870 浏览 0 评论 0原文

我想制作一个将用作覆盖层的自定义控件。该控件应该包含几个子控件,这些子控件应该像往常一样被绘制并且可以单击。但控件中的其他所有内容都应该是透明的并且“可点击”。

以下是我尝试实现此目标的方法...首先,我在要放置覆盖层的窗口中使用 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,我的所有隧道事件都会停止在自定义控件上,并且按钮将变得不可单击。

实现这种行为的正确方法是什么? 是否可以在不子类化画布(或任何其他面板)的情况下做到这一点?

I want to make a custom control which will be used as an overlay. The control should contain a couple of child controls which should be drawn and should be clickable as usual. But everything else in the control should be transparent and "clickable-through".

Here is how I try to achieve this... First, I'm using PreviewMouseDown\Up\Move events in the window where the overlay is going to be placed. I want these events to "go through" transparent part of my custom control, but stop at not-transparent (for example at my button). Second, here is the xaml for my control (root UserControl node was left untouched):

<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>

However if I set Canvas' IsHitTestVisible to false, the whole control including button becomes "unhittable". If set the it to true my all the tunneling events stop at custom control and button becomes unclickable.

What is the right way to achieve this kind of behavior?
Is it possible to do so without subclassing canvas (or any other panel)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

前事休说 2024-12-18 03:35:43

您应该将 Canvas 的背景设置为 null (或者只是没有背景,null 是默认值)。 透明对于鼠标点击是“可见的”。

You should set the background of the Canvas to null (or just no background, null is default). Transparent is "visible" to the mouse clicks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文