2017-02-15 3 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

:背後にあるコードでは削除されませんForegroundプロパティを持っていSave方法で除去される単純なファイル名を指定して実行、およびその他、(ボタンをクリックすることで、これを確認してください)

(編集)とワン入力時に ''オブジェクトのコンテンツを上書きしています。それはあなたがすることを求めていることをやっているだけです。これは ''のネストされたオブジェクトで、 ' 'を含んでいます。あなたの新しい(手動で入力された)コンテンツは、 '実行'のみで構成されます。 –

+0

それで、手動でオーバーライドするのではなく、スパンに向ける方法はありますか? – Naresh

+0

私が知っている一つの方法は、キーイベントを無効にしてテキストを追加することです。しかし、それは非常に面倒です。もう一つの方法は、私はヒッテント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> 

それは段落の2種類が含まれています。

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