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()它可以rOverlay覆盖窗口中的每个控件,除了argControls(). 有谁知道如何做到这一点?

4

2 回答 2

0

选项 1 - 抽奖顺序

虽然有点小技巧,但完成此操作的最简单方法可能是将您希望覆盖的控件放置在矩形之前,并将您希望在矩形之后可见的控件放置。

更好的一步(而不是黑客)将改为使用该Panel.ZIndex属性。这允许您控制 UI 元素的绘制顺序,而不管它们的定义顺序如何。这可以通过Panel.ZIndex如下设置来实现:

  • rOverlay 到某个任意值(如 1)
  • 控件被覆盖到低于 rOverlay 的东西(如 0)
  • 控件对高于 rOverlay 的东西可见(如 2)

但是应该注意,控件的任何透明区域仍将在其后面显示黑色矩形。这可以是指定背景颜色,也可以使用此处提供的另一个选项。

选项 2 - 剪辑

另一种更复杂的方法是将矩形的 Clip 属性设置为仅包含您希望填充的区域的几何图形。这很可能通过使用带有 Exclude 的 CombineMode 的 CombinedGeometry 类的实例来完成。这将防止矩形在剪切区域之外的区域上绘制任何内容。

于 2013-04-16T18:05:07.753 回答
0

当您想隐藏控件时,如何将控件的可见性设置为 Collapsed。

于 2013-04-16T12:28:03.673 回答