如何扩展TextBlock以显示概述文本?

时间:2016-03-13 20:18:48

标签: c# .net wpf xaml textblock

我的问题与this问题有关。

这个问题已经过时了,而答案更是如此,感觉它有点缺乏。用户从头开始创建了一个缺乏某种程度的控件,但最重要的一点是,它感觉不应该(至少对我来说)创建一个全新的控件以便拥有一个可以支持的TextBlock抚摸(概述)文本。

我正在尝试通过提供Brush属性和double属性来扩展TextBlock控件。我曾希望我可以覆盖OnRender方法,但它是密封的,所以我不能。

这是我到目前为止(它并不多):

public class StrokedText: TextBlock {
    public static readonly DependencyProperty
        StrokeProperty = DependencyProperty.Register(
            "Stroke",
            typeof( Brush ),
            typeof( StrokedText ),
            new PropertyMetadata(
                Brushes.Red,
                ( S, E ) => ( S as StrokedLabel ).InvalidateVisual( ) ) ),
        StrokeWidthProperty = DependencyProperty.Register(
            "StrokeWidth",
            typeof( double ),
            typeof( StrokedText ),
            new PropertyMetadata(
                2.0D,
                ( S, E ) => ( S as StrokedLabel ).InvalidateVisual( ) ) );

    /// <summary>
    /// Get or Set Stroke Brush.
    /// </summary>
    public Brush Stroke {
        get { return this.GetValue( StrokeProperty ) as Brush; }
        set { this.SetValue( StrokeProperty, value ); }
    }

    /// <summary>
    /// Get or Set Stroke Width
    /// </summary>
    public double StrokeWidth {
        get { return ( double )this.GetValue( StrokeWidthProperty ); }
        set { this.SetValue( StrokeWidthProperty, value ); }
    }

我花了一些时间查看TextBlock控件,以便跟踪它实际上将字符串作为文本呈现在屏幕上的位置(我想如果我能找到我可以复制方法),但我希望有人可能碰巧已经知道答案并节省了一些时间,因为TextBlock控件只是......疯了。

那么 - 我可以扩展这个TextBlock,以便我可以像我想要的那样描边文本吗?

编辑1:

为清楚起见,似乎对我要做的事情存在误解 - 我不关心概述文本块。我想概述 TEXT 本身。

1 个答案:

答案 0 :(得分:1)

这样的事情:

<TextBlock >
    <TextBlock.Effect>
        <DropShadowEffect ShadowDepth="0"
                    Color="Red"
                    Opacity="1"
                    BlurRadius="5"/>
    </TextBlock.Effect>
    Some text that we want outlined
</TextBlock>

使用DropShadowEffect模拟Glow / Outline效果。