WPF Rich文本框下划线

时间:2016-04-14 07:52:12

标签: wpf richtextbox

我的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>

2 个答案:

答案 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 :)");
                    }
                }
            }
         }