【问题标题】:WPF Rich text box underlineWPF 富文本框下划线
【发布时间】:2016-04-15 01:59:03
【问题描述】:

我的richtextbox 有一个奇怪的问题。 我想检测文本何时为粗体、斜体等。

例如

   if (richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic")  // Pochylenie
            {
                heremycode
            }

如果我们使用

MessageBox(richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString());

我得到斜体。我想对下划线和删除线做同样的事情,因为我不能使用

TextBlock.TextDecorationsProperty.ToString(),

因为我只得到我认为的方法的名称?不要想像“斜体”或“粗体”只是“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>

【问题讨论】:

  • 您的尝试结果如何?异常或空字符串等?
  • 您能否将此添加到您的问题和屏幕截图或其他有帮助的内容中
  • 我编辑了我的问题

标签: wpf richtextbox


【解决方案1】:

你试过了吗:

TextRange selectionRange = new TextRange(RichTextControl.Selection.Start, RichTextControl.Selection.End);

        if (selectionRange.GetPropertyValue(Inline.TextDecorationsProperty) == TextDecorations.Underline)
        {
        }

这应该可以,你只得到对象名称,因为你没有设置你想要作为字符串的依赖属性。装饰可以是下划线等,您必须声明要检查的内容

【讨论】:

  • 它不起作用我试过这个但是我做什么都没关系(选择文本,或者只是点击 RichTextBox)我的消息框是无声的:D
  • mhm 然后从您的代码中发布更多内容,然后我可以查看一下
【解决方案2】:

我们需要查看更多您的代码,因为 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 :)");
                    }
                }
            }
         }

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多