2017-02-15 32 views
0

請幫我理解此操作的結果。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> 

我無法控制此跨度的更改運行。 我需要幫助。

+0

鍵入內容時,您將覆蓋「」對象中的內容。這只是做你要求它做的事情。這是一個嵌套對象,其中包含''的''。您的新(手動輸入)內容僅包含一個「運行」。 –

+0

那麼,有沒有辦法將它直接導入到跨度而不是手動覆蓋它? – Naresh

+0

我知道的一種方法是覆蓋關鍵事件並附加文本。但那非常乏味。另一種方式我保留一個hiddent UI元素,它不會改變。但我覺得那些不準確的方式。 – Naresh

回答

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> 

它含有兩種段落。一個在一個簡單的代碼運行,這是由Save方法去除,而另一個具有前景的財產,這是不會被刪除(通過點擊按鈕進行檢查)

(編輯)的後面:

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