0

一番上のフルスクリーンウィンドウがあります

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

ユーザーが LMB を押したままマウスを動かすと、四角形が描画されます (これは、この私の質問のスクリーンショットのように、画面領域を選択する最も簡単な方法です)。

ウィンドウの背後にあるコンテンツを表示するために、四角形を完全に透明にしたいと考えています。しかし、親ウィンドウよりも透明にすることはできません。私は何をすべきか?

4

1 に答える 1

3

以下のようなことを試して、いくつかのマウス イベント ハンドラーで 2 番目の 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 の 4 つのコンポーネントを個別に調整できます。

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