【问题标题】:How to add drop shadow to just one specific side in WPF?如何在 WPF 中仅向特定一侧添加阴影?
【发布时间】:2021-10-26 10:40:47
【问题描述】:

我正在尝试实现一个网格,只有一侧有阴影,而 其他任何一侧都没有任何阴影。我试着摆弄 DropShadowEffect 的方向属性。

我尝试过的:

<Grid Background="Transparent" Grid.Row="0" Grid.Column="1">
   <Grid Background="White"/>
      <Border CornerRadius="0,5,0,0" BorderBrush="White" BorderThickness="0" Background="White">
         <Border.Effect>
            <DropShadowEffect BlurRadius="5" Direction="355" RenderingBias="Quality" ShadowDepth="2"/>
         </Border.Effect>
      </Border>
   </Grid>
</Grid>

这就是我的代码发生的情况:

我想实现一个仅在网格底部可见的阴影,而在其他任何一侧都没有阴影的痕迹。上面的代码在左侧留下了一条细细的灰色轨迹,这对我不起作用。

对不起,如果这是一个愚蠢的问题,我对 WPF 有点陌生。

【问题讨论】:

  • 那么这是一个渐变。黑色到白色的线性渐变画笔。不是阴影。在一个狭窄的网格列中。
  • @Andy 是的,我只是设法使用矩形和渐变画笔实现了预期的效果。

标签: wpf


【解决方案1】:

我认为 DropShadowEffect 没有为此类应用程序内置任何功能,但是,我设法使用矩形并用线性渐变填充它来实现所需的结果。

 <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.3">
    <Rectangle.Fill>
       <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
          <GradientStop Color="Black" Offset="0"/>
            <GradientStop Color="#00131313" Offset="1"/>
       </LinearGradientBrush>
    </Rectangle.Fill>
 </Rectangle>

要保持与阴影的父级相同的宽度,请将它们添加到相同的网格和相同的列中,将水平和垂直对齐设置为拉伸,阴影将看起来一致。

然后我将矩形放置在阴影的位置。看起来有点古怪,但仍然有效。

编辑: 我找到了另一个似乎更好的解决方案,使用 ClipToBounds 属性和 BorderThickness 属性。

<Border ClipToBounds="True" BorderBrush="White" BorderThickness="0,2,0,0">
   <Border.Effect>
      <DropShadowEffect ShadowDepth="2" BlurRadius="10"/>
   </Border.Effect>
</Border>

使用边框和阴影比使用矩形和调整它直到看起来自然更容易。

建议使用网格来完美定位边框。

【讨论】:

  • 听起来不错。有两种方法的截图吗?
  • 是的,我会添加截图
猜你喜欢
  • 2019-11-18
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多