PrintDocument 和 Scrollviewer
PrintDocument and Scrollviewer
我正在 ScrollViewer
的帮助下逐块打印大屏幕(高)。
在 PrintPage
处理程序中,我向下滚动 ScrollViewer
,然后将 PageVisual
设置为 ScrollViewer
实例。当 SV 位于底部时,我将 HasMorePages
属性 设置为 false。
我的问题是,在 条件 下,我在每页之间用 MessageBox 提示用户,否则 SV 不会滚动,除非在打印过程结束时。
我尝试在 UI 线程上滚动,但没有成功:
void Print_PrintPage(object sender, PrintPageEventArgs e)
{
// DefPage contains properties of the printed page
DefPage defPage = _enumeratorPages.Current;
e.HasMorePages = _enumeratorPages.MoveNext();
ScrollViewerVertical.Dispatcher.BeginInvoke(delegate {
ScrollViewerVertical.ScrollToVerticalOffset(defPage.OffsetY);
});
e.PageVisual = ScrollViewerVertical;
}
如果我使用 ManualResetEvent
和 WaitOne
来等待 UI 线程更新滚动,我的浏览器会冻结...
调用 ScrollViewerVertical.UpdateLayout()
解决了问题
我正在 ScrollViewer
的帮助下逐块打印大屏幕(高)。
在 PrintPage
处理程序中,我向下滚动 ScrollViewer
,然后将 PageVisual
设置为 ScrollViewer
实例。当 SV 位于底部时,我将 HasMorePages
属性 设置为 false。
我的问题是,在 条件 下,我在每页之间用 MessageBox 提示用户,否则 SV 不会滚动,除非在打印过程结束时。
我尝试在 UI 线程上滚动,但没有成功:
void Print_PrintPage(object sender, PrintPageEventArgs e)
{
// DefPage contains properties of the printed page
DefPage defPage = _enumeratorPages.Current;
e.HasMorePages = _enumeratorPages.MoveNext();
ScrollViewerVertical.Dispatcher.BeginInvoke(delegate {
ScrollViewerVertical.ScrollToVerticalOffset(defPage.OffsetY);
});
e.PageVisual = ScrollViewerVertical;
}
如果我使用 ManualResetEvent
和 WaitOne
来等待 UI 线程更新滚动,我的浏览器会冻结...
调用 ScrollViewerVertical.UpdateLayout()
解决了问题