1

私はこれを持っています:

<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <StackPanel Orientation="Horizontal">
            <StackPanel Width="100" Margin="20">
                <CheckBox x:Name="cbFoo1" Content="Foo"/>
                <TextBlock Text="Foo"/>
                <TextBox />
            </StackPanel>
            <StackPanel Width="100" Margin="20">
                <CheckBox x:Name="cbFoo2" Content="Foo"/>
                <TextBlock Text="Foo"/>
                <TextBox />
            </StackPanel>
        </StackPanel>
        <Rectangle Fill="#BF000000" x:Name="rOverlay"/>
    </Grid>
</Window>

を除くウィンドウ内のすべてのコントロールをカバーfooする引数argControls()を持つ関数を作成したいと思います。誰もこれを行う方法を知っていますか?rOverlayargControls()

4

2 に答える 2

0

コントロールを非表示にする場合は、コントロールの可視性を Collapsed に設定するのはどうですか。

于 2013-04-16T12:28:03.673 に答える
0

オプション 1 - 描画順

ちょっとしたハックですが、おそらくこれを実現する最も簡単な方法は、四角形の前に表示したいコントロールを配置し、四角形の後に表示したいコントロールを配置することです。

Panel.ZIndex代わりにプロパティを使用する方が 1 段階優れています (ハックではありません) 。これにより、定義されている順序に関係なく、UI 要素が描画される順序を制御できます。これはPanel.ZIndex、次のように設定することで実現できます。

  • rOverlay を任意の値 (1 など) に
  • rOverlay より低い値 (0 など) にカバーされるコントロール
  • コントロールが rOverlay よりも高いもの (2 など) に表示されるようにします。

ただし、コントロールの透明な領域では、その背後に黒い四角形が引き続き表示されることに注意してください。これは、背景色を指定するか、ここに示されている別のオプションを使用して行うことができます。

オプション 2 - クリッピング

もう 1 つのより複雑な方法は、四角形の Clip プロパティを、塗りつぶしたい領域のみを含むジオメトリに設定することです。これは、Exclude の CombineMode で CombinedGeometry クラスのインスタンスを使用することによって実現される可能性があります。これにより、四角形がクリップされた領域の外側の領域に何も描画されなくなります。

于 2013-04-16T18:05:07.753 に答える