WPF中使用DocumentViewer,中需要显示一个控件的内容,但控件高度超出页面高度,如何让控件分页显示?

谢谢2014 2008-07-02 02:03:49
WPF中使用DocumentViewer,中需要显示一个控件的内容,但控件高度超出页面高度,如何让控件分页显示?

大致代码如下:

FixedDocument fixedDocument = new FixedDocument();
Size pageSize = new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT);
fixedDocument.DocumentPaginator.PageSize = pageSize;

PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();
DetailsDataControl theDetailsDataControl = new DetailsDataControl() { DataContext = simulationRodLoadResult};
fixedPage.Children.Add(theDetailsDataControl);//theDetailsDataControl的高度超出fixedDocument 的页面高度

fixedPage.Measure(pageSize);
fixedPage.Arrange(new Rect(new Point(), pageSize));
fixedPage.UpdateLayout();
((IAddChild)pageContent).AddChild(fixedPage);
fixedDocument.Pages.Add(pageContent);

docViewer.Document = fixedDocument;

这时候的效果是:DocumentViewer会自动截去超出页面范围的部分.
我要的效果是:如果超出页面范围,应该该超出的部分放到下一页显示.
...全文
1345 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookmai 2008-08-27
  • 打赏
  • 举报
回复
这里没有问题,宽高都可以调整
public static void XpsCreate(string xpsName, FlowDocument fd, double Width, double Height)
{
double Top = 20;
double Bottom = 20;
string packageName = "R:\\" + xpsName + ".xps";
Package package = Package.Open(packageName, FileMode.Create);
XpsDocument doc = new XpsDocument(package, CompressionOption.SuperFast);
XpsDocumentWriter docWriter = XpsDocument.CreateXpsDocumentWriter(doc);
if (docWriter != null)
{
DocumentPaginator paginator = ((IDocumentPaginatorSource)fd).DocumentPaginator;
paginator.PageSize = new Size(Width, Height);
//Thickness pagePadding = fd.PagePadding;
fd.PagePadding = new Thickness(10, Top, 10, Bottom);
fd.ColumnWidth = double.PositiveInfinity;
docWriter.Write(paginator);
}
package.Close();
}
lookmai 2008-08-27
  • 打赏
  • 举报
回复
我也有个问题,xps文档宽度和高度不起作用。
XpsDocument doc;
ms = new MemoryStream();
Uri DocumentUri = new Uri("pack://document.xps");
Package p = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
PackageStore.RemovePackage(DocumentUri);
PackageStore.AddPackage(DocumentUri, p);
doc = new XpsDocument(p, CompressionOption.NotCompressed, DocumentUri.AbsoluteUri);
FixedDocument fd = new FixedDocument();
fd.DocumentPaginator.PageSize = new Size(100, 200);
~~~~~~~~~~~~~~~~~不起作用
PageContent pc = new PageContent();
fd.Pages.Add(pc);
FixedPage fp = new FixedPage();
((IAddChild)pc).AddChild(fp);
TextBlock tb = new TextBlock();
tb.Text = "Page one";
fp.Children.Add(tb);
XpsDocumentWriter dw = XpsDocument.CreateXpsDocumentWriter(doc);
dw.Write(fd);
lookmai 2008-08-27
  • 打赏
  • 举报
回复

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧