Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 手动加载框架元素_C#_.net_Wpf - Fatal编程技术网

C# 手动加载框架元素

C# 手动加载框架元素,c#,.net,wpf,C#,.net,Wpf,我构建了一个模板打印系统,通过WPF的CreateVisualsCollator(),使用XAML创建XPS文档: 我在没有UI的情况下做这件事——这实际上是为Windows服务准备的 我一直在做类似手动调用UpdateLayout()来执行大小调整的黑客操作,并且意识到我必须这样做的原因是控件从未触发其加载的事件,也从未进入加载状态。我刚刚遇到了一个障碍,这已经成为一个问题,我的黑客不再工作 有没有一种方法可以手动触发一个元素及其所有子元素的正确加载?我可以从两个角度对此进行讨论 首先,不要直

我构建了一个模板打印系统,通过WPF的
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);