gpt4 book ai didi

c# - 手动加载框架元素

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:21 25 4
gpt4 key购买 nike

我已经构建了一个模板化打印系统,它通过 WPF 的 CreateVisualsCollat​​or() 使用 XAML 创建 XPS 文档:

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 服务指定的。

我一直在做 hack,比如手动调用 UpdateLayout() 来执行大小调整,并且已经意识到我必须这样做的原因是控件永远不会获得它们的 Loaded 事件被触发,并且永远不会进入加载状态。我刚刚遇到了一个障碍,这已经成为一个问题,我的 hack 不再有效。

有没有办法为一个元素及其所有子元素手动触发适当的加载?

最佳答案

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

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

new ContentControl
{
Content = item,
ContentTemplate = template
}

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

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

关于c# - 手动加载框架元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com