2017-02-15 1 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); 
} 

는이 코드를 실행하고 텍스트 상자 나에게 XAML을 보여줍니다 아래, 위 RichTextBox 일부 문자를 입력합니다.

이상하게도 스팬이 손실되어 실행으로 변환됩니다.

<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> 

이 스팬의 변경을 제어 할 수 없습니다. 도움이 필요합니다.

<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> 

그것은 문단의 두 종류가 포함되어

+0

: 뒤에 코드에서 제거되지 않습니다 전경 속성이 Save 방법에 의해 제거되는 간단한 실행, 다른, (버튼을 클릭하여 확인)

(편집)와 하나 입력 할 때 ''개체의 내용을 재정의하고 있습니다. 그것은 당신이 요구하는 것을하는 것입니다. 그것은''이 ''을 포함하는 중첩 된 객체였습니다. 귀하의 새로운 (수동으로 입력 한) 내용은 오직'실행 '으로 구성됩니다. –

+0

그래서 수동으로 재정의하는 대신 범위로 전달하는 방법이 있습니까? – Naresh

+0

내가 아는 한 가지 방법은 키 이벤트를 무시하고 텍스트를 추가하는 것입니다. 그러나 그것은 매우 지루합니다. 또 다른 방법은 내가 hiddent UI 요소를 유지하고 그것은 나던 변화. 그러나 나는 그것이 정확한 방법이 아니라고 느낍니다. – Naresh

답변

1

사용이 예는 차이를 볼 수 있습니다.

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