C# 等待用户界面重新绘制,然后执行“重新绘制”;截图;它的 挑战
我正在尝试创建一个窗口,在PDF文档的页面上绘制一张卡片 我们的想法是接收一个C# 等待用户界面重新绘制,然后执行“重新绘制”;截图;它的 挑战,c#,.net,wpf,C#,.net,Wpf,我正在尝试创建一个窗口,在PDF文档的页面上绘制一张卡片 我们的想法是接收一个集合(应该在卡片上绘制的项目),然后遍历它们,对于每个项目,将其加载到一个UniformGrid(给人一个实际卡片的印象),捕获屏幕的图像并将其绘制到一个PDF文档页面 到目前为止还不错 我所尝试的(并且部分成功) 以下是我尝试过的: (以下代码已添加到窗口的加载的事件处理程序中) 可以找到一个完整的(但很短,我保证)工作示例 此外,还可以找到生成的PDF(调试时和未调试时-请参阅下面的问题) 问题 上述代码在调试模式
集合
(应该在卡片上绘制的项目),然后遍历它们,对于每个项目,将其加载到一个UniformGrid
(给人一个实际卡片的印象),捕获屏幕的图像并将其绘制到一个PDF文档页面
到目前为止还不错
我所尝试的(并且部分成功)
以下是我尝试过的:
(以下代码已添加到窗口的加载的事件处理程序中)
可以找到一个完整的(但很短,我保证)工作示例
此外,还可以找到生成的PDF(调试时和未调试时-请参阅下面的问题)
问题
上述代码在调试模式下运行良好
- 调试时:代码运行时没有错误,PDF的页数正确,卡片正确绘制
- 如果不是:代码运行时没有错误,PDF将使用正确的页数创建,但不会在其上绘制卡片
我认为导致问题的原因是以下代码段上的DispatcherPriority.ContextIdle
:
Dispatcher.Invoke(new Action(() =>
{
PdfHelper.DrawPictureOfControlToPdf(document, this);
}), DispatcherPriority.ContextIdle, null);
它应该指示操作
只能在UniformGrid
完成重绘时运行(更准确地说,是在调度器处理之后)。但显然,这只在调试模式下起作用
有人知道如何解决这个问题吗
如果没有,有没有其他我没有想到的选择
@编辑
我认为这并不重要,但我正在使用生成/处理PDF删除所有调度程序。在代码中调用(他们在这里做得不好),然后调用
this.UpdateLayout();
在调用PdfHelper.DrawPictureOfControlToPdf(文档,this)之前,强制重画当前控件代码>
this.UpdateLayout();