请注意下图中灰色面板中文本下方的1px高亮显示。如何通过WPF / Silverlight实现这一目标?
答案 0 :(得分:5)
在Silverlight 3中,它被称为DropShadow效果。
例如
<Border Height="300" Width="300" Background="Gray">
<Border.Effect>
<DropShadowEffect Opacity="0.34" ShadowDepth="9" Direction="542" BlurRadius="9"/>
</Border.Effect>
</Border>
答案 1 :(得分:0)
我在试图弄清楚如何自己做这件事时偶然发现了这一点。
在我的情况下,我没有控制原始应用程序(Visual Studio,顺便提一下),当我应用任何其他WPF元素时,结果是奇怪的,“发光阴影”被完全从文本中删除。我永远无法弄清楚如何使它工作,所以我写了一个特定于此的ShaderEffect。
您可以下载项目from its repo。
要使用它,请将效果直接应用于文本元素(标签,文本块等):
<Label Content="My Label Content">
<Label.Effect>
<effects:ChiseledTextEffect
ShadowIntensity="1" GlowIntensity="1" Size="0.5" MixDivisor="3" />
</Label.Effect>
</Label>
当然,包括:
xmlns:effects="clr-namespace:Diagonactic.WPF.Effects;assembly=Diagonactic.WPF"
...在XAML的适当位置并引用该项目。
我所包含的参数实际上是默认值,因此您可以将其关闭,除非您需要进行调整。
我的目标是将表现良好的凿子(如果Size设置为负数则为斜角)实现为HLSL / WPF ShaderEffect。它是PixelShader 2.0,因此它应该与Silverlight一起使用,但我还没有亲自测试过它。
完整的文档是here,并且有一个截图,说明它看起来如何配置比默认值给你的更微妙,但这里是简要版本:
大小 - 发光/阴影的像素大小(0.5会在下方产生可见的光晕;上方的阴影非常微妙,在深色文本中会像样本中的那样不可见)。使用负数来获得斜角。
Glow / ShadowIntensity - 增加/减少效果。同时增加两者会使文本保持原始颜色,增加一个或另一个将影响渲染文本的颜色和效果的强度。
MixDivisor - 将文本和效果混合到背景中。 3.0是非常微妙的混合,2.0完全没有。如果文本将位于图像顶部或不一致的背景上,则将数字增加到3.0以上是有用的,但会导致文本与背景的对比度较低。强度和除数对这个用例一起工作。