【问题标题】:Apply outer outlines to text in WPF将外部轮廓应用于 WPF 中的文本
【发布时间】:2018-04-03 12:18:58
【问题描述】:

Here 有一个带有轮廓的文本块的演示。

通过下面的代码,我得到了这个结果

    <local:OutlinedTextBlock Stroke="Red" 
                             FontSize="16" 
                             Fill="Transparent" 
                             StrokeThickness="1">
        abc
    </local:OutlinedTextBlock>

轮廓位于字母边框的中心,如何使轮廓脱离字母?我需要填充是透明的,只有轮廓才会有颜色。

类似的东西:

我的文字不是固定的,但可以由用户更改。

【问题讨论】:

  • 你能多解释一下你的目的吗?我有时做这种事情的方式是为每个字母 a-z 定义一个路径,并将它们呈现在一个水平排列的 itemscontrol 中。
  • 此文本是否在应用程序中更改?还是恒定的?
  • @Isma 不,我的问题不同,在我的问题上,我带来了您提到的问题的链接,并解释了为什么这里还有一个问题,这里没有重复。
  • 您可以创建两个几何图形,一个从规则填充的文本中创建一个“内部”,一个从描边文本的轮廓创建一个“外部”。然后通过带有 GeometryCombineMode.Exclude 的 CombinedGeometry 组合它们。

标签: c# .net wpf


【解决方案1】:

您需要推送剪辑几何,只需在 this 代码中添加 4 行新行

    protected override void OnRender(DrawingContext drawingContext)
    {
        EnsureGeometry();

        var boundsGeo = new RectangleGeometry(new Rect(0, 0, ActualWidth, ActualHeight));
        var invertGeo = Geometry.Combine(boundsGeo, _TextGeometry, GeometryCombineMode.Exclude, null);

        drawingContext.PushClip(invertGeo);
        drawingContext.DrawGeometry(null, _Pen, _TextGeometry);
        drawingContext.Pop();

        drawingContext.DrawGeometry(Fill, null, _TextGeometry);
    }

但是你需要将 StrokeThickness 加倍,因为只有一半的笔划是可见的。

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2017-08-11
    • 2018-12-11
    • 2012-11-15
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多