Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置Canvas.ZIndex在控件之间绘制黑色面板?_C#_.net_Wpf_Silverlight_Z Index - Fatal编程技术网

C# 如何设置Canvas.ZIndex在控件之间绘制黑色面板?

C# 如何设置Canvas.ZIndex在控件之间绘制黑色面板?,c#,.net,wpf,silverlight,z-index,C#,.net,Wpf,Silverlight,Z Index,通过以下代码,我可以演示不透明度为50%的黑色面板如何位于每个矩形的顶部: <Grid> <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" Canvas.ZIndex="1"/> <Rectangle Fill="Red" Width="200" Height="200" Canvas.ZIndex="0"/

通过以下代码,我可以演示不透明度为50%的黑色面板如何位于每个矩形的顶部:

 <Grid>
    <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" Canvas.ZIndex="1"/>
    <Rectangle Fill="Red" Width="200" Height="200" Canvas.ZIndex="0"/>
    <Grid>
        <Rectangle Fill="Blue" Width="100" Height="100" Canvas.ZIndex="0"/>
        <Rectangle Fill="Yellow" Width="50" Height="50" Canvas.ZIndex="1"/>
    </Grid>
</Grid>

看起来是这样的:

我想要黑色面板上方的黄色矩形,但这似乎是不可能的

我可以通过将包含蓝色和黄色矩形的网格的ZIndex设置为“1”来实现接近。但这也会使蓝色矩形高于黑色,这是一个问题

<Grid>
    <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" Canvas.ZIndex="1"/>
    <Rectangle Fill="Red" Width="200" Height="200" Canvas.ZIndex="0"/>
    <Grid Canvas.ZIndex="1">
        <Rectangle Fill="Blue" Width="100" Height="100" Canvas.ZIndex="0"/>
        <Rectangle Fill="Yellow" Width="50" Height="50" Canvas.ZIndex="1"/>
    </Grid>
</Grid>

我如何只得到黑色上方的黄色矩形? 在我的实际应用程序中,我有用户控件,而不是矩形。我喜欢让其他的东西都被半黑色的阴影覆盖,从而使一个特别的控制突出


非常感谢,

我认为您目前的控制安排无法实现这一点

这里有两个级别的控件,内部网格内的“蓝色”和“黄色”控件,以及与内部网格一起的“黑色”和“红色”控件

ZIndex
在同一“级别”的控件上工作-因此您可以确保黄色控件位于蓝色控件的顶部,但在更高级别,这些控件在内部网格下分组,因此被视为单个单元


唯一可行的方法是所有控件处于同一级别。如果在内部网格中包含第二个半透明矩形,则可以将黄色置于该矩形之上,但这可能会导致其他控件太暗。

一种方法可能是不仅使用简单的黑色矩形

而是使用由两个矩形组成的路径。第一个矩形将覆盖整个区域,第二个矩形仅覆盖可用的控件

这将创建一个带有孔的大矩形,目标控件可以在其中显示并接受输入


下面的部分正在计算矩形几何体以添加以创建孔,但这相当简单。

谢谢Chris,我最终做到了这一点。打破子网格并将其与父网格合并以使所有对象处于同一级别有点痛苦。但至少现在它可以工作了。谢谢Anthony,这肯定会很好一个解决方案,但在我看来,它需要做很多工作,一旦分辨率发生变化,它可能会变得过于复杂。我最终将网格展平为一个。不过,感谢您指出了另一个解决方案。