You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WPF中如何仅为元素的某一特定侧边添加投影效果

解决方案

以下两种方案均可实现Grid仅底部显示投影、其余侧边无残留的效果:

方案1:裁剪多余阴影(改动最小,兼容现有代码)

原生DropShadowEffect的模糊半径会向四周自然扩散,仅调整方向参数无法完全消除其余侧边的浅阴影,你可以通过外层容器裁剪掉非底部的阴影部分,修改后代码如下:

<Grid Background="Transparent" Grid.Row="0" Grid.Column="1">
   <Grid Background="White"/>
   <!-- 外层容器仅在底部预留阴影空间,其余边裁剪溢出内容 -->
   <Grid ClipToBounds="True" Margin="0,0,0,5">
      <Border CornerRadius="0,5,0,0" BorderBrush="White" BorderThickness="0" Background="White">
         <Border.Effect>
            <DropShadowEffect BlurRadius="5" Direction="270" RenderingBias="Quality" ShadowDepth="2"/>
            <!-- Direction设为270度对应正下方投影,更适配底部阴影需求 -->
         </Border.Effect>
      </Border>
   </Grid>
</Grid>

说明:外层Grid开启ClipToBounds="True"后,会自动裁剪掉顶部、左侧、右侧溢出的阴影内容,仅底部预留的Margin空间会显示阴影,不会出现其余侧边的残留痕迹。

方案2:手动模拟底部阴影(性能更优,无多余渲染开销)

如果你的场景需要大量使用该效果,建议用渐变边框手动模拟阴影,避免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 Height="5" VerticalAlignment="Bottom" Margin="0,0,0,-5">
         <Border.Background>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
               <GradientStop Color="#22000000" Offset="0"/>
               <GradientStop Color="#00000000" Offset="1"/>
            </LinearGradientBrush>
         </Border.Background>
      </Border>
   </Grid>
</Grid>

你可以自行调整渐变的透明度、高度参数,匹配需要的阴影深浅和模糊程度,该方案完全不会产生其余侧边的阴影痕迹。


内容的提问来源于stack exchange,提问作者TheCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:36:06