具有角半径的 WPF 插入阴影

Posted

技术标签:

【中文标题】具有角半径的 WPF 插入阴影【英文标题】:WPF inset shadow with corner radius 【发布时间】:2022-01-14 03:35:11 【问题描述】:

我正在尝试在 WPF 中模拟具有圆角行为的 css 嵌入阴影。

我尝试使用 Windows 主题中的 DropShadowEffect、SystemDropShadowChrome 和自定义 OpacityMasks 的不同组合,但我所有的解决方案都没有接近所需的阴影效果 :(

只是一个普通的角边框开始:

<Border Width="100" Height="50" CornerRadius="30" BorderThickness="1" BorderBrush="Green" Background="White">
    <Border.Effect>
        <DropShadowEffect ShadowDepth="0" BlurRadius="5" Color="Blue"/>
    </Border.Effect>
</Border>

我想要达到的目标:

.shadow-div
  width: 100px;
  height: 50px;
  border-radius: 34px;
  background: white;
  border: 1px solid green;
  box-shadow: inset 0px 3px 4px blue;
&lt;div class="shadow-div"/&gt;

【问题讨论】:

***.com/questions/61123720/… 类似问题,但技术不同(以防万一它可能有所帮助) 【参考方案1】:

你的意思是这样的:

我会在Border 中使用Border,外部Border 有一个渐变画笔作为背景。

<Border Width="100" Height="50" CornerRadius="30" BorderThickness="1" BorderBrush="Green" Padding="2,4,2,1">
    <Border.Background>
        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
            <LinearGradientBrush.GradientStops>
                <GradientStop Color="Blue" Offset="0"></GradientStop>
                <GradientStop Color="White" Offset="1"></GradientStop>
            </LinearGradientBrush.GradientStops>
        </LinearGradientBrush>
    </Border.Background>
    <Border Background="White"  CornerRadius="30" BorderThickness="1">
        <Border.Effect>
            <DropShadowEffect ShadowDepth="2" BlurRadius="7" Direction="90" Color="White" Opacity="1" />
        </Border.Effect>
    </Border>
</Border>

【讨论】:

不完全是我需要的,它在 CSS 版本中看起来仍然更自然,但我明白了你的想法,谢谢!会尝试使用不同的渐变参数:)

以上是关于具有角半径的 WPF 插入阴影的主要内容,如果未能解决你的问题,请参考以下文章

iOS6 向具有角半径的容器 UIView 添加阴影

在带有阴影的 LinearLayout 上获取角半径

如果设置角半径,则不应用阴影

UIVIew 角半径和阴影?

视图上的角半径和阴影突然不起作用

如何在swift中仅使用角半径为3条边添加阴影?