除单一控制外,使背景黑色

时间:2013-04-16 11:36:36

标签: c# .net wpf vb.net xaml

我有这个:

<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()之外的窗口中的每个控件。有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:0)

如果想要隐藏控件,可以将控件的可见性设置为折叠。

答案 1 :(得分:0)

选项1 - 绘制订单

虽然有点黑客,也许最简单的方法是在矩形之前放置你希望覆盖的控件,并在矩形之后显示你想要的控件。

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

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

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

选项2 - 剪辑

另一个更复杂的方法是将矩形的Clip属性设置为仅包含您希望填充的区域的几何。这可能是通过使用CombinedGeometry class with the CombineMode of Exclude的实例来完成的。这样可以防止矩形在剪切区域之外的区域上绘制任何东西。