【问题标题】:How can I add multiple FlowDocumentReaders to a StackPanel?如何将多个 FlowDocumentReader 添加到 StackPanel?
【发布时间】:2010-02-18 11:22:56
【问题描述】:

感谢Leom's answer,我能够将 FlowDocument 添加到 StackPanel,方法是将其包装在 FlowDocumentReader 中。

但是现在我有两个问题:

  • 似乎只添加了第一个 FlowDocumentReader,其余的被忽略了
  • 有一个我无法摆脱的不需要的边距

如何将多个 FlowDocumentReader 添加到 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;
        }

    }
}

【问题讨论】:

    标签: c# wpf xaml flowdocument flowdocumentreader


    【解决方案1】:

    要使文本显示在左侧,您需要在流文档上设置 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;
            }
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多