如何在WPF窗口中“打孔”

时间:2019-03-08 05:04:25

标签: c# wpf

我现在从WPF开始,我不知道是否可能,但是应该。

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

在WinForms中可以使用TransparencyKey和Panel,但是WinForms不能满足我对该项目的需求。

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

另一个例子: enter image description here

4 个答案:

答案 0 :(得分: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必须为空

AllowTransparency必须为真

图像源只是中心具有矩形透明部分的图像。您也可以用动态的方式绘制它!

结果: enter image description here

答案 1 :(得分: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”获得透明窗口。改变不透明度以获得透明度

答案 2 :(得分: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>

答案 3 :(得分:0)

Masking可能是Windows窗体的TransparencyKey的最接近替代品。