尝试类似下面的操作,并在某些鼠标事件处理程序中动态更改第二个 RectangleGeometry (selectRect) 的大小和位置。也许还可以将第一个 RectangleGeometry 的大小调整为您的屏幕大小。
<Window x:Class="TransparentRectangle.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStyle="None" WindowState="Maximized"
AllowsTransparency="True" Background="Transparent">
<Grid>
<Path Fill="Black" Opacity="0.5">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry x:Name="screenRect" Rect="0,0,2000,2000"/>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry x:Name="selectRect" Rect="100,100,200,100"/>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Grid>
</Window>
然而,一个问题可能是您不会在 CombinedGeometry 的排除部分中获得任何鼠标事件。为避免这种情况,您可以将鼠标处理程序附加到窗口(而不是路径)并为其提供几乎透明的背景。
<Window ... Background="#01000000" MouseMove=... etc>
...
</Window>
编辑:一个更简单的解决方案可能是边框。您可以独立调整 BorderThickness 的四个分量。
<Grid ...>
<Border BorderBrush="Black" Opacity="0.5" BorderThickness="100,100,200,400"/>
</Grid>