Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 重叠阴影效果_C#_.net_Wpf - Fatal编程技术网

C# 重叠阴影效果

C# 重叠阴影效果,c#,.net,wpf,C#,.net,Wpf,我知道我想做的可能很简单,很明显,但我无法解决它。我有一个有两行的网格,顶行有一个填充该行的边框元素(固定高度为30)。第二行(固定高度100)当前包含一个白色背景的空DockPanel(这将包含动态控件的ContentControl) 我在第一行的边框上添加了一个阴影效果,方向为270,将阴影投影到边框下方。它几乎看不见,这并不奇怪,因为没有足够的空间容纳阴影。我想要的是阴影从行溢出,并与下一行的DockPanel重叠 我通过使用白色背景的包含网格,然后在边框元素中添加一个底部边距来容纳阴影,

我知道我想做的可能很简单,很明显,但我无法解决它。我有一个有两行的网格,顶行有一个填充该行的边框元素(固定高度为30)。第二行(固定高度100)当前包含一个白色背景的空DockPanel(这将包含动态控件的ContentControl)

我在第一行的边框上添加了一个阴影效果,方向为270,将阴影投影到边框下方。它几乎看不见,这并不奇怪,因为没有足够的空间容纳阴影。我想要的是阴影从行溢出,并与下一行的DockPanel重叠

我通过使用白色背景的包含网格,然后在边框元素中添加一个底部边距来容纳阴影,实现了这一点。虽然这看起来不错,但这并不是我真正想要实现的

抱歉没有代码示例,我不得不离开工作,但这仍然困扰着我

提前谢谢


Paul

将DockPanel放在边界之前,以便边界在z顺序中更高

这很有效

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <DockPanel Grid.Row="1" Background="White" />
    <Border Background="PaleGreen" BorderBrush="DarkGreen" BorderThickness="5">
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
    </Border>
</Grid>

但在这里,停靠面板重叠并遮挡了下降阴影

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Border Background="PaleGreen" BorderBrush="DarkGreen" BorderThickness="5">
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
    </Border>
    <DockPanel Grid.Row="1" Background="White" />
</Grid>

因为网格是一个面板,所以它继承了Panel.ZIndex attached属性。可以使用此属性按字面设置Z索引,而不是像Phil在他的示例中那样从XAML顺序推断Z索引

非工作示例可以使用一对附加属性进行修复:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Border Background="PaleGreen" BorderBrush="DarkGreen" BorderThickness="5"  Panel.ZIndex="2">
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
    </Border>
    <DockPanel Grid.Row="1" Background="White" Panel.ZIndex="1"/>
</Grid>


这两种方法都有相同的作用,但Panel.ZIndex有助于格式化关注点,或以编程方式更改Z索引。

+1这很有效,非常简单明了的解决方案谢谢。尽管它基本上和伊恩斯科尔的答案是一样的,但我觉得我更喜欢他的答案,因为这意味着我的标记是按照它的自然顺序定义的。如果我能接受这两个答案,我会的。非常感谢你的帮助。谢谢你简单而有效的回答!我知道这很简单,没想到会这么简单:0)。