我有这个:
<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()
之外的窗口中的每个控件。有谁知道如何做到这一点?
答案 0 :(得分:0)
如果想要隐藏控件,可以将控件的可见性设置为折叠。
答案 1 :(得分:0)
虽然有点黑客,也许最简单的方法是在矩形之前放置你希望覆盖的控件,并在矩形之后显示你想要的控件。
更好的一步(而非黑客)将改为使用Panel.ZIndex
属性。这允许您控制UI元素的绘制顺序,而不管它们的定义顺序如何。这可以通过如下设置Panel.ZIndex
来完成:
但应注意,控件的任何透明区域仍会显示其后面的黑色矩形。这可以是指定背景颜色,也可以使用此处提供的其他选项。
另一个更复杂的方法是将矩形的Clip属性设置为仅包含您希望填充的区域的几何。这可能是通过使用CombinedGeometry class with the CombineMode of Exclude的实例来完成的。这样可以防止矩形在剪切区域之外的区域上绘制任何东西。