手动加载框架元素

科里·尼尔森

我已经建立了一个模板化的打印系统,该系统可以通过WPF使用XAML创建XPS文档CreateVisualsCollator()

FrameworkElement fe = ...;

using (Package p = Package.Open(...))
using (XpsDocument doc = new XpsDocument(p))
{
    XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
    SerializerWriterCollator col = writer.CreateVisualsCollator();

    Size size = new Size(page size...)
    fe.Measure(size);
    fe.Arrange(new Rect(size));
    fe.UpdateLayout();

    col.Write(fe);
    // fe.IsLoaded is still false here!
}

我这样做是在没有UI的情况下进行的-实际上,这是针对Windows服务的。

我一直在做一些黑客UpdateLayout()操作,例如手动调用执行大小调整,并且意识到我这样做的原因是控件永远不会Loaded触发事件,也永远不会进入加载状态。我刚刚遇到了一个麻烦,这已经成为一个问题,而且我的hack也不再起作用。

有没有一种方法可以为元素及其所有子元素手动触发适当的加载?

科里·尼尔森

我已经从两个角度对此进行了攻击。

首先,不要直接加载您的元素。使用ContentControl,似乎可以更好地实例化模板并解决许多深度数据绑定问题:

new ContentControl
{
    Content = item,
    ContentTemplate = template
}

接下来,允许空闲队列进行处理。这将强制运行各种延迟的任务,而WPF通常在窗口空闲时将这些任务排队等待:

FrameworkElement element = ...;
element.Dispatcher.BeginInvoke(() => {}, DispatcherPriority.SystemIdle);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

手动加载UITextField

来自分类Dev

手动加载位图

来自分类Dev

手动加载UITextField

来自分类Dev

手动同步实体框架

来自分类Dev

如何手动加载 UITableView

来自分类Dev

手动添加Segment iOS框架时出现错误

来自分类Dev

手动添加Segment iOS框架时出现错误

来自分类Dev

实体框架 6 手动更新记录

来自分类Dev

如何在 Enlightment 库中手动折叠框架

来自分类Dev

angularjs手动删除jQuery自动加载

来自分类Dev

DbContext需要手动加载导航属性

来自分类Dev

如何手动加载聚合物元件

来自分类Dev

使用angular.bootstrap手动加载/卸载模块?

来自分类Dev

在MVC 6中手动加载导航属性

来自分类Dev

Ember手动更改URL不会加载页面

来自分类Dev

如何手动以N:N关系加载相关实体?

来自分类Dev

SQLXML批量加载还是手动迭代?

来自分类Dev

angularjs手动删除jQuery自动加载

来自分类Dev

使用Autowire手动加载Spring Application Context

来自分类Dev

在MVC 6中手动加载导航属性

来自分类Dev

Zsh:手动加载完成功能

来自分类Dev

无法手动加载蜡烛 imbd 数据集

来自分类Dev

手动触发DOM元素的滚动事件?

来自分类Dev

手动触发对特定表单元素的验证

来自分类Dev

在Blazor应用中手动更新特定的html元素

来自分类Dev

我的输入元素未手动更新或显示值

来自分类Dev

手动更新jQuery UI可排序元素

来自分类Dev

列出元素而不手动指定它们

来自分类Dev

“手动”链表java中的元素总和