C# 手动加载框架元素
我构建了一个模板打印系统,通过WPF的C# 手动加载框架元素,c#,.net,wpf,C#,.net,Wpf,我构建了一个模板打印系统,通过WPF的CreateVisualsCollator(),使用XAML创建XPS文档: 我在没有UI的情况下做这件事——这实际上是为Windows服务准备的 我一直在做类似手动调用UpdateLayout()来执行大小调整的黑客操作,并且意识到我必须这样做的原因是控件从未触发其加载的事件,也从未进入加载状态。我刚刚遇到了一个障碍,这已经成为一个问题,我的黑客不再工作 有没有一种方法可以手动触发一个元素及其所有子元素的正确加载?我可以从两个角度对此进行讨论 首先,不要直
CreateVisualsCollator()
,使用XAML创建XPS文档:
我在没有UI的情况下做这件事——这实际上是为Windows服务准备的
我一直在做类似手动调用UpdateLayout()
来执行大小调整的黑客操作,并且意识到我必须这样做的原因是控件从未触发其加载的事件,也从未进入加载状态。我刚刚遇到了一个障碍,这已经成为一个问题,我的黑客不再工作
有没有一种方法可以手动触发一个元素及其所有子元素的正确加载?我可以从两个角度对此进行讨论
首先,不要直接加载元素。使用ContentControl,它似乎可以更好地处理实例化模板并解决许多深层数据绑定问题:
new ContentControl
{
Content = item,
ContentTemplate = template
}
接下来,允许空闲队列进行处理。这将强制运行WPF通常在窗口空闲时排队等待的各种延迟任务:
FrameworkElement element = ...;
element.Dispatcher.BeginInvoke(() => {}, DispatcherPriority.SystemIdle);
在initializecomponent方法中没有调用loaded事件吗?没有。它在渲染之前的某个时间调用。
FrameworkElement element = ...;
element.Dispatcher.BeginInvoke(() => {}, DispatcherPriority.SystemIdle);