【问题标题】:How to "punch a hole" in a WPF window [duplicate]如何在 WPF 窗口中“打孔”[重复]
【发布时间】:2019-03-08 05:04:24
【问题描述】:

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

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

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

示例:

另一个例子:

【问题讨论】:

    标签: c# wpf


    【解决方案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 必须为真

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

    结果:

    【讨论】:

      【解决方案2】:
       <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" 获得透明窗口。改变不透明度以获得透明度

      【讨论】:

      • 是的,我得到了那部分,但我将在窗口中有更多元素(正在播放视频),并且我希望矩形在该视频中也是透明的
      • 你能把UI的屏幕截图发上来吗?无法想象您想要实现的目标
      • 我已经编辑了我的问题,并包含了一个 GIF,显示了我想要的(我之前在 WinForms 中制作的)
      • @ThiagoSouza 如果你“得到了那个部分”,它应该在你的问题中。问题应该包括你到目前为止所做的代码。
      • @Nyerguds 我通过控制不透明度理解了他们所说的,但这并没有解决我的问题,因为我的窗口中有更多元素。
      【解决方案3】:

      得到了类似的东西。

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-12
          • 1970-01-01
          • 2016-01-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多