从WPF RichTextBox获取FontWeight / FontStyle / TextDecorations

时间:2008-10-14 19:09:01

标签: .net wpf

如何检测WPF RichTextBox中光标位置的当前文本格式?

4 个答案:

答案 0 :(得分:5)

此主题的作者还询问了TextDecorations,其中您没有提供示例代码及其使用的不同。我将其发布为进一步解决方案

var obj = _myText.GetPropertyValue(Inline.TextDecorationsProperty);

                    if (obj == DependencyProperty.UnsetValue)                   
                        IsTextUnderline = false;// mixed formatting 

                    if (obj is TextDecorationCollection)
                    {
                        var objProper = obj as TextDecorationCollection;

                        if (objProper.Count > 0)                        
                            IsTextUnderline = true; // all underlined                       
                        else                        
                            IsTextUnderline = false; // nothing underlined                   
                    } 

答案 1 :(得分:3)

我使用CaretPosition代替选择的开始和结束,就好像RichTextBox实际上有一个跨越多个格式区域的选择,你会得到DependencyProperty.UnsetValue。

TextRange tr = new TextRange(rtb.CaretPosition, rtb.CaretPosition);
object oFont = tr.GetPropertyValue(Run.FontFamilyProperty);

答案 2 :(得分:1)

这是一个确定FontWeight,FontStyle,TextDecorations(删除线,下划线)以及超级和下标的解决方案。

        TextRange textRange = new TextRange(rtb.Selection.Start, rtb.Selection.End);

        bool IsTextUnderline = false;
        bool IsTextStrikethrough = false;
        bool IsTextBold = false;
        bool IsTextItalic = false;
        bool IsSuperscript = false;
        bool IsSubscript = false;

        // determine underline property
        if (textRange.GetPropertyValue(Inline.TextDecorationsProperty).Equals(TextDecorations.Strikethrough))
            IsTextStrikethrough = true; // all underlined   
        else if (textRange.GetPropertyValue(Inline.TextDecorationsProperty).Equals(TextDecorations.Underline))
            IsTextUnderline = true; // all strikethrough

        // determine bold property
        if (textRange.GetPropertyValue(Inline.FontWeightProperty).Equals(FontWeights.Bold))
            IsTextBold = true; // all bold

        // determine if superscript or subscript
        if (textRange.GetPropertyValue(Inline.BaselineAlignmentProperty).Equals(BaselineAlignment.Subscript))
            IsSubscript = true; // all subscript
        else if (textRange.GetPropertyValue(Inline.BaselineAlignmentProperty).Equals(BaselineAlignment.Superscript))
            IsSuperscript = true; // all superscript

答案 3 :(得分:0)

尝试下面的代码,其中rtb是RichTextBox:

TextRange tr = new TextRange(rtb.Selection.Start, rtb.Selection.End);
object oFont = tr.GetPropertyValue(Run.FontFamilyProperty);