C# WPF 滚动视图 基于滚动位置进行打印
本文关键字:滚动 位置 打印 WPF 视图 于滚动 | 更新日期: 2023-09-27 18:36:01
我在 WPF C# 上构建了一个保存发票的应用程序,并创建了一个分配给滚动视图的用户控件。一切都很完美,直到我注意到这个非常令人厌烦的打印错误。
因此,用户控件的大小为 A4。如果在打印时滚动视图滚动到顶部:
**PrintDialog pd = new PrintDialog();
pd.PrintVisual(scrollView, "print this off");**
不会出现任何问题。但是,如果滚动视图位于中间或底部,则打印时带有偏移量。我试图通过在打印前将滚动视图移动到顶部来补救它,它这样做了,但打印结果错误......
**scrollView.ScrollToHome();
PrintDialog pd = new PrintDialog();
pd.PrintVisual(scrollView, "print this off");**
然而,如果我再次点击打印按钮,它将正确打印。我不知道为什么它会在移动到顶部之前打印,因为这是我对它的唯一解释......
请帮忙
滚动主页后致电UpdateLayout()
:
scrollView.ScrollToHome();
scrollView.UpdateLayout();
(来自 UpdateLayout() 函数的文档:"确保此元素的所有可视子元素都针对布局进行了正确更新。
这
就像一个魅力,比实现线程更简单。两个好答案
我无法使用仅由滚动查看器和面板组成的非常小的示例 WPF 应用程序重现该问题。黑暗中的一枪:尝试在打电话给scrollView.UpdateLayout()
后打电话给scrollView.ScrollToHome()
。UpdateLayout() 函数的文档说,"确保此元素的所有可视子元素都针对布局进行了正确更新",这听起来像我们想要的。- 德拉蒂凯
当我在
打印操作之前更改视觉对象的布局时,我遇到了同样的问题。如果我立即打印,我会得到错误的结果。我猜视觉对象在打印之前没有足够的时间来正确呈现新布局。我像这样修复:
using System.Threading.Tasks;
async void Print() // Use async
{
PrintDialog pd = new PrintDialog();
scrollView.ScrollToHome();
await Task.Delay(TimeSpan.FromSeconds(1.0)); // Wait 1 second scrollView being properly rendered.
pd.PrintVisual(scrollView, "print this off");
}