WPF / Silverlight文本效果

时间:2010-02-21 18:14:02

标签: .net wpf silverlight xaml user-interface

请注意下图中灰色面板中文本下方的1px高亮显示。如何通过WPF / Silverlight实现这一目标?

Valid XHTML http://www.iconpaper.org/preview/10012101b.jpg

2 个答案:

答案 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以上是有用的,但会导致文本与背景的对比度较低。强度和除数对这个用例一起工作。