0

我有最上面的全屏窗口

AllowsTransparency="True" WindowStyle="None" Topmost="True" WindowState="Maximized" Left="0" Top="0"
OpacityMask="#2B000000" Background="Black" Cursor="Cross"

当用户按住 LMB 并移动鼠标时,我正在绘制矩形(它是选择,就像我的问题Easest way to select screen region 中的屏幕截图一样)。

我想让矩形完全透明,以查看窗口后面的内容。但我不能让它比父窗口更透明。我该怎么办?

4

1 回答 1

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 ... Background="#01000000" MouseMove=... etc>
    ...
</Window>

编辑:一个更简单的解决方案可能是边框。您可以独立调整 BorderThickness 的四个分量。

<Grid ...>
    <Border BorderBrush="Black" Opacity="0.5" BorderThickness="100,100,200,400"/>
</Grid>
于 2012-10-07T17:39:38.420 回答