我的richtextbox有一个奇怪的问题。 我想检测文本何时是Bold,Italic等。
E.g
if (richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic") // Pochylenie
{
heremycode
}
如果我们使用
MessageBox(richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString());
我得到了斜体。我想用下划线和删除线做同样的事情,因为我不能使用
TextBlock.TextDecorationsProperty.ToString()
,
因为我认为只得到方法的名称? Nothink如“italic”,或“bold”只是“FontStyleProperty”。
private void richTextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
....
if (richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic"
{
backgroundP.Stroke = Brushes.Black;
backgroundP.Fill = Brushes.LawnGreen;
p = true;
}
TextRange selectionRange = new TextRange(richTextBox.Selection.Start, richTextBox.Selection.End);
if (selectionRange.GetPropertyValue(Underline.TextDecorationsProperty).Equals(TextDecorations.Underline))
{
MessageBox.Show("Wow We did it :)");
backgroundUnderline.Stroke = Brushes.Black;
}
}
和XAML代码:
<Grid x:Name="Center" Margin="10,231,10,10">
<Rectangle Fill="#B2F4F4F5" Stroke="Black" Margin="1,0,-1,0"/>
<Label x:Name="labelNotepad" Content="Notepad" HorizontalAlignment="Left" VerticalAlignment="Top" Width="385" FontWeight="Bold" Background="#FFC1FCFF" FontSize="21.333" Height="56" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="2,1,0,0" BorderThickness="0,0,1,0"/>
<RichTextBox x:Name="richTextBox" Margin="1,58,0,0" FontSize="16" BorderThickness="1,2,1,1" BorderBrush="Black" UseLayoutRounding="False" VerticalScrollBarVisibility="Auto" Background="#7FFFFFFF" SelectionChanged="richTextBox_SelectionChanged">
<FlowDocument/>
</RichTextBox>
答案 0 :(得分:0)
你试过这个:
TextRange selectionRange = new TextRange(RichTextControl.Selection.Start, RichTextControl.Selection.End);
if (selectionRange.GetPropertyValue(Inline.TextDecorationsProperty) == TextDecorations.Underline)
{
}
这应该有效,因为你没有设置依赖属性你想要的字符串,你只得到对象名称。装饰可以是下划线等,您必须声明要检查的内容
答案 1 :(得分:0)
我们需要查看更多代码,因为SeeuD1的建议应该有效。但是,只有在整个选择加下划线时才会起作用。
如果您需要查看选择中是否有任何带下划线的文本,而不仅仅是,那么您需要检查选择中的所有内联对象。
在这个例子中,我只会检查FlowDocument中的段落:
foreach (var block in RichTextBox.Document.Blocks.Where(x => selection.Start.CompareTo(x.ContentEnd) < 0 && selection.End.CompareTo(x.ContentStart) > 0))
{
var paragraph = block as Paragraph;
if (paragraph != null)
{
foreach (var selectedInline in paragraph.Inlines.Where(x => selection.Start.CompareTo(x.ContentEnd) < 0 && selection.End.CompareTo(x.ContentStart) > 0))
{
if (selectedInline.GetPropertyValue(Inline.TextDecorationsProperty) == TextDecorations.Underline)
{
MessageBox.Show("Wow We did it :)");
}
}
}
}