2017-05-05 10 views
0

私はRichTextBoxコントロールを使用してchallangeに直面しています:RichTextBoxコンテンツをその中のコントロール(ボタン)で取り出す方法は?

私は成功したの下にXAMLを参照してください、うまく設計時にそれとボタンに段落を追加することができる午前:

<RichTextBox x:Name="rtxtStep" HorizontalAlignment="Left" Height="207" Margin="10,32,0,0" VerticalAlignment="Top" Width="427" IsDocumentEnabled="True" KeyUp="richTextBox_KeyUp"> 
      <FlowDocument> 
       <Section FontSize="15"> 
        <Paragraph> 
         Click on this: 

          <Hyperlin k NavigateUri="http://stackoverflow.com">stackoverflow</Hyperlin k> 


        </Paragraph> 

        <Paragraph> 
         <Button Click="Button_Click" Width="143" >Also Click On This</Button> 
         <Button Click="Button_Click" Width="143" >button 2</Button> 
        </Paragraph> 
       </Section> 
      </FlowDocument> 
     </RichTextBox> 

と私は取得できています私のコードからテキストだけで罰金、以下を参照:

private void richTextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      TextRange txtrContent = new TextRange(rtxtStep.Document.ContentStart, rtxtStep.Document.ContentEnd); 
      string allContent = txtrContent.Text; 
     } 
    } 

を返す:

"Click on this: stackoverflow\r\n \r\n\r\n" 

質問は、どうやってボタンとテキストを取り出すのですか?

答えて

0

あなたは本当にあまりにも多くを期待していると思います。 RichTextBoxのFlowDocumentは要素の階層です。あなたができることは、要素のツリーを降りてボタンを見つけることです。このような何か...あなたのXAMLの場合

private void richTextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      TextRange txtrContent = new TextRange(rtxtStep.Document.ContentStart, rtxtStep.Document.ContentEnd); 
      string allContent = txtrContent.Text; 
      PrintBlocks(rtxtStep.Document.Blocks); 
     } 
    } 

    private void PrintBlocks(IEnumerable<Block> blocks) 
    { 
     foreach(Block b in blocks) 
     { 
      Trace.WriteLine("Found " + b.GetType().Name); 
      if(b is Section) 
      { 
       PrintBlocks((b as Section).Blocks); 
      } 
      else if(b is Paragraph) 
      { 
       PrintInlines((b as Paragraph).Inlines); 
      } 
     } 

    } 

    private void PrintInlines(IEnumerable<Inline> inlines) 
    { 
     foreach(Inline i in inlines) 
     { 
      if(i is InlineUIContainer) 
      { 
       PrintInlineUIContainer(i as InlineUIContainer); 
      } 

     } 
    } 
    private void PrintInlineUIContainer(InlineUIContainer i) 
    { 
     Trace.WriteLine("Found " + i.Child.GetType().Name + " " + i.Child.ToString()); 
    } 

、この出力が生成されます...

Found Section 
Found Paragraph 
Found Paragraph 
Found Button System.Windows.Controls.Button: Also Click On This 
Found Button System.Windows.Controls.Button: button 2 

しかし、あなたはすでにこれを知っていました。テキストとボタンを統合された形式(おそらくHTML?)にしたいと思うようです。私はあなたがこれを行うために独自のコードを書く必要があると思います。

関連する問題