C# 除单个控件外,将背景设为黑色

C# 除单个控件外,将背景设为黑色,c#,.net,wpf,vb.net,xaml,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"> <St

我有这个:

<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>

我想用参数argControls生成一个函数foo,该函数使rOverlay覆盖窗口中除argControls之外的所有控件。有人知道怎么做吗?

如果要隐藏控件,请将其可见性设置为“折叠”。

选项1-绘制顺序 虽然有点麻烦,但实现这一点最简单的方法可能是将希望覆盖的控件放在矩形之前,并将希望可见的控件放在矩形之后

使用Panel.ZIndex属性更好,而且不是黑客。这允许您控制UI元素的绘制顺序,而不考虑它们的定义顺序。这可以通过如下设置Panel.ZIndex来实现:

rOverlay设置为任意值,如1 控件的覆盖范围低于rOverlay,如0 控件对高于rOverlay的对象可见,如2 但是,应该注意的是,控件的任何透明区域仍将在其后面显示黑色矩形。这可以指定背景色,也可以使用此处提供的另一个选项

选项2-剪裁
另一个更复杂的方法是将矩形的“剪辑”属性设置为仅包含要填充的区域的几何体。这可能通过使用的实例来实现。这将防止矩形在剪裁区域之外的区域上绘制任何内容。

将所有控件移到后面,将覆盖层放在顶部,并将所需控件移到前面?我想从代码后面执行此操作。另外,如果控件位于StackPanel或DockPanel中,它将不起作用。你说得对,我在那里评论得太快了!很抱歉点击控件怎么样?@HenkHolterman我将从code-behind.Nope禁用它们。这不是我的问题。对不起,我不完全清楚你需要做什么。您是在试图更改控件的背景颜色,还是实际上将它们隐藏起来,以便用户看不到它们?