2

我有一个 FlowDocument,我想填充窗口的整个宽度和高度。我试过使用FlowDocumentPageViewer(运气不好),现在正在使用DocumentPageView. 我仍然无法让它停靠/填满整个空间;它只是坐在中间,以它可以创建的最小尺寸(有意义吗?)

这是我的代码:

   public DocumentPageView GetPage()
   {
        FlowDocumentPageViewer viewer = new FlowDocumentPageViewer();           
        StreamReader reader = new StreamReader(location);
        string data = reader.ReadToEnd();
        reader.Close();
        string xamlData = HtmlToXamlConverter.ConvertHtmlToXaml(data, true);
        FlowDocument result = (FlowDocument)System.Windows.Markup.XamlReader.Load(new MemoryStream(System.Text.UnicodeEncoding.Default.GetBytes(xamlData)));

        viewer.Document = result;
        viewer.VerticalAlignment = VerticalAlignment.Center;
        viewer.HorizontalAlignment = HorizontalAlignment.Center;

        DocumentPageView pageView = new DocumentPageView();
        pageView.VerticalAlignment = VerticalAlignment.Center;
        pageView.HorizontalAlignment = HorizontalAlignment.Center;
        pageView.Stretch = System.Windows.Media.Stretch.Uniform;
        pageView.PageNumber = 0;
        pageView.StretchDirection = StretchDirection.Both;
        pageView.DocumentPaginator = ((IDocumentPaginatorSource)result).DocumentPaginator;
        return pageView;
   }

请注意,此代码包含我的两种方法的组合,但只有DocumentPageView当前使用的。这是从我的 HTML 源创建的 Xaml:

<FlowDocument xml:space="preserve" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph TextAlignment="center" FontSize="22pt" FontFamily="arial">Test Paragraph</Paragraph>
<Paragraph TextAlignment="center" FontFamily="arial">Test second paragraph</Paragraph>
</FlowDocument>

如果我调整字体大小,内容只会垂直调整大小(请注意拉伸方向设置为两者)。有任何想法吗?

4

5 回答 5

4

我遇到了类似的问题FlowDocumentScrollView,但这个解决方案似乎也适用于FlowDocumentPageView

FlowDocument居中是因为它的属性PagePadding设置为auto,auto,auto,auto。将 PagePadding 设置为0修复此行为。

<FlowDocumentScrollViewer VerticalScrollBarVisibility="Auto">
    <FlowDocument PagePadding="0">
    </FlowDocument>
</FlowDocumentScrollViewer>
于 2010-09-22T16:08:16.560 回答
1

以下几行导致您的元素居中(这与拉伸不同):

viewer.VerticalAlignment = VerticalAlignment.Center;
viewer.HorizontalAlignment = HorizontalAlignment.Center;
pageView.VerticalAlignment = VerticalAlignment.Center;
pageView.HorizontalAlignment = HorizontalAlignment.Center;

您可以安全地删除它们,因为这里的默认对齐方式是拉伸。

如果您仍想使查看器居中,请明确定义页面大小(请记住,一英寸有 96 个点,Margin 和 PageSize 以磅为单位设置):

宽度= 96 * 8.5

高度= 96 * 11

于 2011-08-03T04:43:42.227 回答
0

您能否指定在何处以及如何使用GetPage()方法的结果?是 xbap 还是桌面应用程序?

我在问这个问题,因为以下文档在Kaxaml中显示得恰到好处:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>  
  <FlowDocumentPageViewer>
  <FlowDocument >
<Paragraph TextAlignment="center" FontSize="22pt" FontFamily="arial">Test Paragraph</Paragraph>
<Paragraph TextAlignment="center" FontFamily="arial">Test second paragraph</Paragraph>
</FlowDocument>
  </FlowDocumentPageViewer>
  </Grid>
</Page>

PS:如果它是桌面应用程序,您总能通过Snoop 工具(来自 Pete Blois)找到导致问题的人。

于 2009-08-31T20:06:32.600 回答
-2

(此评论是从另一个帐户写的)

@Anvaka:我完全正确的意思是文档应该“停靠在容器中”,即字体应该调整大小,它应该填充容器的高度和宽度。现在我正在考虑它,这对于流文档来说似乎不是正确的行为。

当我将流文档放在容器中时,它位于父容器的中间(到目前为止一切都很好)。但是父容器没有填充它的父容器,所以当我缩放或更改字体大小时,我希望 documentPageView 容器的宽度和高度增加,但保持居中。

于 2009-09-01T06:51:34.610 回答
-2

更新:它是一个桌面应用程序,getpage() 结果被发布到一个完美停靠/填充的网格中。

<Window x:Class="GreenWebPlayerWPF.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="Auto" Width="Auto" WindowStyle="None" WindowState="Maximized" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing">
    <Grid Width="Auto" Height="Auto" Name="TransitionContainer" Background="White" Margin="0">
        //here the result from GetPage() method is inserted
    </Grid>
</Window>
于 2009-08-31T20:11:57.860 回答