2010-02-18 3 views
4

Благодаря Leom's answer я был в состоянии добавить FlowDocument к StackPanel, обернув его в FlowDocumentReader.Как добавить несколько FlowDocumentReaders в StackPanel?

Но теперь у меня есть две проблемы:

  • это кажется добавляется только первый FlowDocumentReader, а остальные игнорировались
  • есть нежелательный запас, что я не могу избавиться от

Как добавить несколько FlowDocumentReaders в StackPanel без нежелательного поля?

alt text http://www.deviantsart.com/upload/1ndiqqe.png

XAML:

<Window x:Class="TestFlowdoc23432.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="200" Width="300"> 
    <StackPanel Margin="10"> 
     <ContentControl x:Name="MainArea"/> 
    </StackPanel> 
</Window> 

Код За:

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 

namespace TestFlowdoc23432 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      StackPanel sp = new StackPanel(); 

      TextBlock tb1 = new TextBlock(); 
      tb1.Text = "first text block"; 
      sp.Children.Add(tb1); 

      TextBlock tb2 = new TextBlock(); 
      tb2.Text = "second text block"; 
      sp.Children.Add(tb2); 

      sp.Children.Add(GetFlowDocumentReader("first flow document reader")); 
      sp.Children.Add(GetFlowDocumentReader("second flow document reader")); 

      MainArea.Content = sp; 
     } 

     FlowDocumentReader GetFlowDocumentReader(string text) 
     { 
      FlowDocumentReader fdr = new FlowDocumentReader(); 
      FlowDocument fd = new FlowDocument(); 
      fdr.Document = fd; 
      fdr.Margin = new Thickness(0); 
      Paragraph par = new Paragraph(); 
      par.Margin = new Thickness(0); 
      fd.Blocks.Add(par); 

      Run r = new Run(text); 
      par.Inlines.Add(r); 

      return fdr; 
     } 

    } 
} 

ответ

3

Для того, чтобы текст появился на левой стороне вы должны установить свойство pagepadding на вашем flowdocument следующим образом:

fd.PagePadding = new Thickness(0); 

причина того, что вы, кажется, только чтобы получить первый читатель becuase он заполняет пространство, доступное (переместить его, чтобы быть первым объектом, и вы не увидите TextBlocks). Если вы измените FlowDocumentReader как FlowDocumentScrollViewer и используете свойство VerticalScrollBarVisibility, вы можете получить желаемый эффект. Ниже приведен ваш метод GetFlowDocumentReader с внесенными изменениями:

FlowDocumentScrollViewer GetFlowDocumentReader(string text) 
     { 
      FlowDocumentScrollViewer fdr = new FlowDocumentScrollViewer(); 

      FlowDocument fd = new FlowDocument(); 
      fdr.Document = fd; 
      fdr.Margin = new Thickness(0); 
      Paragraph par = new Paragraph(); 
      par.Margin = new Thickness(0); 
      fd.Blocks.Add(par); 

      Run r = new Run(text); 
      par.Inlines.Add(r); 

      fd.PagePadding = new Thickness(0); 
      fdr.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; 

      return fdr; 
     } 
+0

Право на цель, хорошо работает, спасибо! –

+0

Рад, что я могу помочь –

Смежные вопросы