如何在WPF窗口中“打洞”

3

我现在开始学习WPF,不确定是否有可能,但应该是可以实现的。

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

使用TransparencyKey和Panel可以在WinForms中实现此功能,但WinForms无法满足我这个项目的需求。

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

另一个例子: enter image description here

4个回答

1
这应该能为您解决问题:

<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需要为true。

而图像源只是一个带有中心矩形透明部分的图像。你也可以动态地绘制它!

结果: enter image description here


0

遮罩可能是最接近于Windows Forms的TransparencyKey的替代品。


0
 <Window x:Class="WpfApp5.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp5"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800"
    WindowStyle="None"
    Opacity="0.1"
    AllowsTransparency="True">   
 </Window>

将WindowStyle ="None" 和AllowsTransparency ="True"设置为透明窗口。通过改变不透明度来控制透明度的程度。

是的,我明白了那部分,但是我将在窗口中有更多元素(一个视频正在播放),我希望矩形在该视频中也是透明的。 - Thiago Souza
你能发布一下UI的截图吗?我无法想象你试图实现什么。 - neelesh bodgal
我已经编辑了我的问题,并包含了一个GIF,展示了我想要什么(之前在WinForms中制作过)。 - Thiago Souza
1
@ThiagoSouza 如果你“掌握了那部分”,那么它应该在你的问题中。问题应该包括你已经完成的代码。 - Nyerguds
@Nyerguds 我理解通过控制不透明度可以解决问题,但这并没有解决我的问题,因为我在窗口中有更多的元素。 - Thiago Souza

0

有类似这样的东西。

<Window x:Class="WpfApp3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" WindowStyle="None" AllowsTransparency="True" Background="Transparent">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Rectangle Fill="#66FFFFFF" Grid.Column="0" Grid.RowSpan="3"/>
    <Rectangle Fill="#66FFFFFF" Grid.Column="2" Grid.RowSpan="3"/>
    <Rectangle Fill="#66FFFFFF" Grid.Column="1" Grid.Row="0"/>
    <Rectangle Fill="#66FFFFFF" Grid.Column="1" Grid.Row="2"/>
    <Rectangle x:Name="workingRectangle" Fill="Transparent" Stroke="Red" Grid.Column="1" Grid.Row="1"/>
</Grid>
</Window>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接