WPF RichTextBox跨度更改为“运行”

时间:2017-02-15 19:52:25

标签: wpf richtextbox

请帮助我了解此操作的结果。

我有一个简单的测试应用程序,其中包含以下XAML。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <RichTextBox x:Name="rtb">
        <FlowDocument>
            <Paragraph>
                <Span x:Name="def" Tag="default">
                    <Run>asd</Run>
                </Span>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>
    <TextBox x:Name="tx" Grid.Row="1" TextWrapping="Wrap"/>
</Grid>

我在后面的代码中有以下内容。

public MainWindow()
{
    InitializeComponent();
    rtb.TextChanged += Rtb_TextChanged;

}
private void Rtb_TextChanged(object sender, TextChangedEventArgs e)
{
    tx.Text = XamlWriter.Save(rtb.Document);
}

当我运行此代码并在上面RichTextBox中输入一些字母时,下面的文本框会显示xaml。

奇怪的是,它失去了跨度并转换为跑步。

<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Paragraph>as
        <Run xml:lang="en-in" xml:space="preserve"> </Run> d
    </Paragraph>
</FlowDocument>

我无法控制此跨度的更改以运行。 我需要帮助。

1 个答案:

答案 0 :(得分:1)

使用此示例查看差异:

    <Grid>
        <Grid.RowDefinitions>
        <RowDefinition  Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
    </Grid.RowDefinitions>
        <RichTextBox x:Name="rtb">
            <FlowDocument>
                <Paragraph>
                    <Span x:Name="def" Tag="default">
                        <Run>asd</Run>
                    </Span>
                </Paragraph>
            <Paragraph>
                <Span x:Name="def1" Tag="default">
                    <Run Foreground="Red">asd</Run>
                    <Run>new</Run>
                </Span>
            </Paragraph>
        </FlowDocument>
        </RichTextBox>
        <TextBox x:Name="tx" Grid.Row="1" TextWrapping="Wrap"/>
        <Button Content="Click Me" Grid.Row="2" Click="tx_Click"/>
</Grid> 

它包含两种段落。一个有一个简单的Run,它被Save方法删除,另一个有Foreground属性,没有删除(点击按钮检查这个)

代码背后的

(编辑):

    private void tx_Click(object sender, RoutedEventArgs e)
    {
        tx.Text = System.Windows.Markup.XamlWriter.Save(rtb.Document);
    }