我有最顶层的全屏窗口
AllowsTransparency="True" WindowStyle="None" Topmost="True" WindowState="Maximized" Left="0" Top="0"
OpacityMask="#2B000000" Background="Black" Cursor="Cross"
我正在绘制矩形,当用户持有LMB并移动鼠标时(它的选择,就像我的问题Easiest way to select screen region中的截图一样)。
我想让矩形完全透明,以查看窗口后面的内容。但我不能让它比父窗口更透明。我该怎么办?
答案 0 :(得分:3)
尝试类似下面的内容,并在某些鼠标事件处理程序中动态更改第二个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(而不是Path),并为其提供几乎透明背景。
<Window ... Background="#01000000" MouseMove=... etc>
...
</Window>
编辑:一个更简单的解决方案可能是边境。您可以单独调整BorderThickness的四个组件。
<Grid ...>
<Border BorderBrush="Black" Opacity="0.5" BorderThickness="100,100,200,400"/>
</Grid>