如何将多个FlowDocumentReaders添加到StackPanel?

感谢Leom的回答,我可以通过将FlowDocument包装在FlowDocumentReader中来将其添加到StackPanel中。

但现在我有两个问题:

  • 似乎添加了第一个 FlowDocumentReader,其余的被忽略了
  • 有一个我不能摆脱的不必要的边际

如何在没有不需要的边距的情况下将多个FlowDocumentReaders添加到StackPanel?

替代文字http://www.deviantsart.com/upload/1ndiqqe.png

XAML:

     

代码背后:

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

要使文本显示在左侧,您需要在flowdocument上设置pagepadding属性,如下所示:

 fd.PagePadding = new Thickness(0); 

您似乎只获得第一个读者的原因是因为它填充了可用空间(将其移动为第一个对象,您将看不到文本块)。 如果将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; }