c# - 如何在 WPF 窗口中显示 "punch a hole"

标签 c# wpf

<分区>

我现在开始使用 WPF,我不知道是否可行,但应该可行。

我试图在我的表单中创建一个完全透明的区域,删除矩形内的所有内容(这些内容将是一个 AxWindowsMediaPlayer,如下所示),并且能够看到我窗口后面的内容。

在 WinForms 中使用 TransparencyKey 和面板是可能的,但 WinForms 不能满足我对这个项目的需求。

例子: Example of "punching a hole" in a window

另一个例子: enter image description here

最佳答案

这应该可以解决问题:

<Window
        [...]
        Title="MainWindow" MinHeight="200" MinWidth="400" WindowStyle="None" AllowsTransparency="True">
    <Window.OpacityMask>
        <ImageBrush                                                 
        ViewportUnits="RelativeToBoundingBox"
        TileMode="None" 
        ImageSource="/Images/rect.png"
        />
    </Window.OpacityMask>
 <!-- many many controls-->
</Window>

WindowStyle 必须是 none

AllowTransparency 需要为真

而图像源只是一个图像,中间有一个矩形透明部分。你也可以动态地画这个!

结果: enter image description here

关于c# - 如何在 WPF 窗口中显示 "punch a hole",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55057019/

相关文章:

c# - 检查是否所有复选框都未选中 C# WPF

c# - 通过代码将 Eventhandler 添加到 DataTemplate 内的形状

c# - 在 WPF 中将 BackgroundWorker 与 ProgressBar 结合使用

c# - TinyPG 没有正确解析这个语法,bug 还是错误的语法?

c# - 将字符串存储在类文件的变量中

wpf - 如何限制 <Border> 元素的宽度和高度等于其内部内容?

wpf - 如何阻止在 DotNetBrowser 中加载远程内容?

c# - 具有多输入和多字段的 LINQ

c# - 读取 XML 中的下一个节点 (Linq to XML C#)

c# - 删除和更新查询在 ADO.NET 中不起作用