Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF RichTextBox中获取/设置段落中的段落行高?_C#_Wpf - Fatal编程技术网

C# 如何在WPF RichTextBox中获取/设置段落中的段落行高?

C# 如何在WPF RichTextBox中获取/设置段落中的段落行高?,c#,wpf,C#,Wpf,我需要获取/设置当前段落,特别是当前插入符号位置的行高和行距值 我可以这样设置字体系列: public string SelectionFontFamily { get => GetFormatting(Inline.FontFamilyProperty)?.ToString() ?? ""; set => SetFormatting(Inline.FontFamilyProperty, value ?? "Times New Roman"); } private v

我需要获取/设置当前段落,特别是当前插入符号位置的行高和行距值

我可以这样设置字体系列:

public string SelectionFontFamily
{
    get => GetFormatting(Inline.FontFamilyProperty)?.ToString() ?? "";
    set => SetFormatting(Inline.FontFamilyProperty, value ?? "Times New Roman");
}
private void SetFormatting(DependencyProperty property, object value)
{
    var selection = Rtb.Selection;
    selection.ApplyPropertyValue(property, value);
}
private object GetFormatting(DependencyProperty property)
{
    var range = Rtb.Selection;
    object value = null;
    var pointer = range.Start;
    if (pointer is TextPointer)
    {
        var needsContinue = true;
        DependencyObject element = pointer.Parent as TextElement;
        while (needsContinue && (element is Inline || element is Paragraph || element is TextBlock))
        {
            value = element.GetValue(property);
            needsContinue = ((value is IEnumerable seq)) ? seq.Cast<object>().Count() == 0 : value == null;
            element = element is TextElement ? ((TextElement)element).Parent : null;
        }
    }
    return value;
}
但我需要将其应用于选定的块,而不是第一个块。如果我能找出用户用插入符号选择的段落,这可能会奏效


感谢您的帮助。TIA.

你找到的答案很接近。不必查看文档,您应该能够直接查看插入符号位置,如下所示:

var paragraph = Rtb.CaretPosition.Paragraph;

谢谢。我最终还是偶然发现了这一点,但这并不能真正解决我的问题。尽管我正在加载一个用Word创建的RTF文档,该文档指定的行距为double,但LineHeight值返回为NaN。不仅如此,RTB不显示间距,也就是说,它渲染为单间距。非常令人困惑。看看这个问题的答案,看看它们是否有助于将你推向正确的方向。DOCX与flowdocument不是1:1匹配。我正在加载一个RTF文件。我使用Word创建它,但没有以.docx格式保存它。为了确保问题不是Word,我创建了第二个RTF文件。只是这次我用了写字板,距离上次打开那个应用已经有好几年了。它只包含一段双行距的文字。同样的事情。我只能得出结论,WPF RichTextBox不支持双间距。但是,Thx用于辅助。
var paragraph = Rtb.CaretPosition.Paragraph;