c# - 如何获取 RichTextBox 中选定文本的父标签?
问题描述
我得到FlowDocument
了RichTextBox
控制:
<RichTextBox>
<FlowDocument>
<Paragraph>
<Span>First Line</Span>
</Paragraph>
<Paragraph>
<Span>Second Line</Span>
</Paragraph>
<Paragraph>
<Span>Third Line</Span>
</Paragraph>
</FlowDocument>
</RichTextBox>
我想获取对Paragraph
所选文本的父标记的引用,因为我需要更改TextAlignment
段落的属性。
解决方案
尝试使用GetParentParagraph()
下面声明的方法:
public static class TextRangeExt
{
public static Paragraph GetParentParagraph(this TextPointer position)
{
var direction = LogicalDirection.Backward;
for (; position != null; position = position.GetNextContextPosition(direction))
{
if (position.GetAdjacentElement(direction) is Paragraph para) { return para; }
}
return null;
}
}
下面的代码用于测试目的。
MainWindow.xaml:
<Window ...>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<RichTextBox Name="rtb" BorderBrush="{x:Null}" Padding="5" Margin="10"
VerticalScrollBarVisibility="Auto">
<FlowDocument>
<Paragraph>
<Span>First Line</Span>
</Paragraph>
<Paragraph>
<Span>Second Line</Span>
</Paragraph>
<Paragraph>
<Span>Third Line</Span>
</Paragraph>
</FlowDocument>
</RichTextBox>
<Button Grid.Row="1" Click="Button_SearchParagraph" Margin="2" Padding="3">Search Parent Paragraph</Button>
</Grid>
</Window>
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_SearchParagraph(object sender, RoutedEventArgs e)
{
var range = rtb.Selection;
if (!range.IsEmpty)
{
if (range.Start.GetParentParagraph() is Paragraph para)
rtb.CaretPosition = para.ContentStart;
}
rtb.Focus();
}
}
推荐阅读
- r - 将栅格数据转换为 data.frame
- angular - Power bi 日期切片器的问题
- javascript - 算法正确时元素交换不正确
- xamarin - Xamarin Realm DB 删除所有记录
- python - TensorFlow 中 tf.GradientTape 的急切执行错误
- go - 在 Golang 中使用参数测试 URL
- react-native - 带有 react-native (expo) 的 babel-relay-plugin 抛出关于 'cypto' 的错误
- python - 如何使用 python pptx 复制 PowerPoint 幻灯片?
- python - Pandas 有条件的滚动总和
- vuejs2 - 使用组件(尤其是嵌套)时属性、数据和计算值的混淆