将外部轮廓应用于WPF中的文本

时间:2018-04-03 12:18:59

标签: c# .net wpf

Here有一个带有轮廓的textBlock的演示。

使用下面的代码我得到这个结果

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

enter image description here

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

类似的东西:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

您需要推送剪辑几何图形,只需向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,因为只有一半的笔画是可见的。

结果:

enter image description here