我如何从RichTextBox读取内容信息是粗体,下划线,斜体等

时间:2014-01-23 11:09:17

标签: c# wpf richtextbox

如果文字是粗体,下划线或斜体,我一直试图弄清楚如何从richtextbox获取信息。因此,如果我从richtextbox读取一行,我需要知道某些单词是否加粗等等?我不想将内容保存到.rtf但是要保存到另一个,这就是为什么我需要知道哪些单词被格式化为什么所以我可以在单词之前添加标签以保存内容,如.txt文件。

是的,如果你这样做就行了

private void Button_Click(object sender, RoutedEventArgs e)
{
    foreach (Paragraph p in myRichTextBox.Document.Blocks)
    {
        foreach (var inline in p.Inlines)
        {
            if (inline.FontWeight == FontWeights.Bold)
            {
                // obtain text from p
            }               
        }
    }
}

我如何获得粗体文字?

1 个答案:

答案 0 :(得分:1)

WPF中的RTB包含FlowDocument。因此,您可以解析文档的树,并检测哪个inline包含特定文本。基本概念:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <RichTextBox x:Name="myRichTextBox">
        <RichTextBox.Document>
            <FlowDocument>
                <Paragraph>
                    <Bold>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</Bold>
                </Paragraph>
                <Paragraph>
                    <Italic>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</Italic>
                </Paragraph>
                <Paragraph>
                    <Underline>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</Underline>
                </Paragraph>
            </FlowDocument>
        </RichTextBox.Document>
    </RichTextBox>

    <Button Grid.Row="1" Content="Parse" Click="Button_Click"/>
</Grid>

代码隐藏:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        foreach (Paragraph p in myRichTextBox.Document.Blocks)
        {
            foreach (var inline in p.Inlines)
            {
                if (inline is Bold)
                {
                    // ...
                }

                if (inline is Italic)
                {
                    // ...
                }

                if (inline is Underline)
                {
                    // ...
                }
            }
        }
    }

注意,内联可以嵌套:

                    <Underline>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                        <Bold>
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                            <Italic>
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                            </Italic>
                        </Bold>
                    </Underline>

在解析内容时,您应该考虑到这一点。