【发布时间】:2010-02-21 18:14:02
【问题描述】:
请注意,图像下方的 1px 突出显示在灰色面板中的文本下方。使用 WPF/Silverlight 如何实现这一点?
【问题讨论】:
-
您是否可以访问产生这些内容的来源?这是什么软件?
-
不是,我只是在网上看到图片,知道这个效果在 Mac 上用的很多。
标签: .net wpf silverlight xaml user-interface
请注意,图像下方的 1px 突出显示在灰色面板中的文本下方。使用 WPF/Silverlight 如何实现这一点?
【问题讨论】:
标签: .net wpf silverlight xaml user-interface
在 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>
【讨论】:
我在尝试自己弄清楚如何做到这一点时偶然发现了这一点。
在我的例子中,我没有控制原始应用程序(顺便说一句,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 实现的性能良好的凿子(或斜角,如果 Size 设置为负数)。它是 PixelShader 2.0,所以它应该可以与 Silverlight 一起使用,虽然我没有亲自测试过。
完整的文档是here,它的配置看起来比默认设置更微妙,但这里是简短版本:
大小 - 发光/阴影的像素大小(0.5 会在下面产生可见的发光;上面的阴影非常微妙,在示例中的深色文本中是不可见的)。使用负数获得斜角。
Glow/ShadowIntensity - 增加/减少效果。同时增加两者会使文本保持其原始颜色,增加一个或另一个会影响渲染文本的颜色和效果的强度。
MixDivisor - 将文本和效果混合到背景中。 3.0 是一个非常微妙的混合,2.0 根本没有。如果文本将位于图像顶部或背景不一致,则将数字增加到 3.0 以上会很有用,但会导致文本与背景的对比度较低。对于这个用例,强度和除数协同工作。
【讨论】: