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;