Outlined font effect for text in WPF
我一直在寻找一种在WPF中为某些文本创建轮廓的方法,以使其与背景之间的区别更大。我尝试模仿的原始外观如下
您会注意到字体非常小,这使此问题非常困难。我发现所有控件和代码段的轮廓文字都是在字母中绘制轮廓,而不是在字母周围绘制轮廓,这使这些控件在我的情况下不是一个好选择。即使只是简单地绘制阴影以伪造边框之类的东西也是不够的
我很好奇您是否知道一些控件可以通过在字母外部绘制轮廓来为文本添加轮廓,从而允许我使用较小的字体。另外,您认为游戏中经常使用的Sprite字体是一种好方法吗?如果是这样,您有什么建议的库/控件吗?
- 对我来说,第二种文字样式比第一种文字样式更具区别性。
-
@Kirenenko第二种样式具有白色而不是翡翠文字颜色(在第一种样式中指红色背景上的红色文字),并且它稍大。此外,第一样式的图片质量较低。
-
您可以在文本中添加阴影还是绘制两次,一次为黑色
-
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
-
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
-
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
-
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
-
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
目前我想留下一小段代码,到目前为止,这已经帮助我创造了一个非常不错的结果,看起来像这样:
我在Canvas中使用了多个TextBlock元素,并按照ChrisF的建议将它们覆盖。令人惊讶的是,事实证明它看起来比预期的要好,并且失真更少,因为我不必使用增大的字体大小。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Canvas>
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="2" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="2" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="4" Canvas.Left="4" />
<TextBlock Text="{StaticResource TestString}" FontSize="18"
FontFamily="BigNoodleTitling" Canvas.Top="3" Canvas.Left="3"
Foreground="#de5f5f" />
</Canvas> |
我仍然对替代解决方案感兴趣!
- 您可以尝试<Text.Effect> <Blur>,它可以正常运行,虽然可能不如您的示例所示。