代码之家  ›  专栏  ›  技术社区  ›  Burt

WPF/Silverlight文本效果

  •  2
  • Burt  · 技术社区  · 14 年前

    请注意,在图像下方,灰色面板中文本下方的1px高亮显示。如何使用WPF/Silverlight实现这一点?

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

    2 回复  |  直到 9 年前
        1
  •  5
  •   Shawn Mclean    14 年前

    在Silverlight3中,它被称为Dropshadow效果。

    如。

      <Border Height="300" Width="300" Background="Gray">
            <Border.Effect>
                <DropShadowEffect Opacity="0.34" ShadowDepth="9" Direction="542" BlurRadius="9"/>
            </Border.Effect>
      </Border>
    
        2
  •  0
  •   mdip    9 年前

    我在试图自己解决这个问题时偶然发现了这个问题。

    在我的例子中,我没有控制原始应用程序(顺便说一下,是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中的适当位置并引用项目。

    我包含的参数实际上是默认值,所以您可以不使用它们,除非您需要对其进行调整。

    我的目标是将一个性能良好的凿子(如果大小设置为负数,则为斜角)作为hlsl/wpf shadereffect实现。它是Pixelshader 2.0,所以它应该与Silverlight一起工作,尽管我还没有亲自测试过它。

    完整的文件是 here 这里有一个屏幕截图,显示了它的配置比默认值要微妙一些,但这里有一个简短的版本:

    大小-光晕/阴影的像素大小(0.5将在下面产生可见的光晕;上面的阴影非常微妙,在像示例中那样的深色文本中不可见)。使用负数得到斜面。

    辉光/阴影强度-增加/减少效果。同时增加两者会使文本保持其原始颜色,增加一个或另一个将影响渲染文本的颜色和效果的强度。

    混合除数-将文本和效果混合到背景中。3.0是一种非常微妙的混合,2.0根本不是。如果文本将位于图像顶部或背景不一致,但会导致文本与背景的对比度较低,则将数字增加到3.0以上非常有用。强度和除数共同作用于这个用例。