【发布时间】:2018-07-09 10:40:19
【问题描述】:
我想突出显示RichTextBlock中的选定文本,但是当我在选择文本后单击“btnHighlight”按钮时,突出显示的文本与选择不匹配(可能是因为超链接但你怎么解决它?)。我哪里错了?
MainPage.xaml:
<Grid>
<RichTextBlock Name="Rtb" Margin="0,150,0,150" Width="300">
<Paragraph TextIndent="0">
<Hyperlink UnderlineStyle="None" CharacterSpacing="0">
<Run Text="1" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text a" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="2" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text b" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="3" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text c" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="4" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text d" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="5" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text e" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="6" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text f" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="7" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text g" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="8" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text h" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="9" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text i" FontSize="20"/>
<Hyperlink UnderlineStyle="None">
<Run Text="10" FontSize="20" FontWeight="Bold"/>
</Hyperlink>
<Run Text="Text l" FontSize="20"/>
</Paragraph>
</RichTextBlock>
<Button x:Name="btnHighlight" Click="btnHighlight_Click" Content="Highlight" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
<Button x:Name="btnRemoveHighlight" Click="btnRemoveHighlight_Click" Content="Remove" HorizontalAlignment="Left" Margin="110,10,0,0" VerticalAlignment="Top"/>
</Grid>
MainPage.xaml.cs:
private void btnHighlight_Click(object sender, RoutedEventArgs e)
{
int selectionStart = Rtb.SelectionStart.Offset;
int selectionEnd = Rtb.SelectionEnd.Offset;
int lenght = selectionEnd - selectionStart;
TextRange textRange = new TextRange() { StartIndex = selectionStart, Length = lenght };
TextHighlighter highlighter = new TextHighlighter();
highlighter.Background = new SolidColorBrush(Colors.Yellow);
highlighter.Ranges.Add(textRange);
Rtb.TextHighlighters.Add(highlighter);
}
private void btnRemoveHighlight_Click(object sender, RoutedEventArgs e)
{
Rtb.TextHighlighters.Clear();
}
提前谢谢..!
【问题讨论】:
-
即使我删除了超链接,我也可以重现这个问题,如果我将 TextRange 更改为 TextRange textRange = new TextRange() { StartIndex = 3, Length = 10 },它工作正常。我会将此问题报告给相关团队。感谢您的报告。
-
这个问题已经过时了半年,所以以防万一有人遇到同样的问题,我首先要验证的是
length是否在此代码中正确计算和使用。 AFAIRTextPointer.Offset可能包括未显示的位置,而TextRange.Length以 unicode 字符测量,因此使用一个来计算另一个不应该正常工作。Rtb.SelectedText.Length可能比Offset更有意义。
标签: c# uwp richtextblock