在Constructor/XAML中添加控件/usercontrols VS在WPF窗口的Loaded Event中添加

本文关键字:添加 窗口 Event Loaded WPF 控件 Constructor XAML usercontrols VS | 更新日期: 2023-09-27 18:27:14

我想知道在XAML或构造函数中添加一些控件/usercontrols(需要时间初始化)与在某个窗口的Loaded事件中添加这些控件/usercontrol之间是否有区别。

我有一个窗口,在那里我使用相同的用户控制三次。这是一个用户控件,需要一些时间来初始化它自己。这个窗口在初始化所有三个用户控件的情况下,大约需要5-7秒来初始化自己。我应该如何在窗口中添加它们?(有人建议,在加载窗口后添加控件将使窗口以比在窗口的XAML/构造函数中添加控件更快的方式加载。)

我想从专家那里得到一些关于这个话题的建议,因为我对此了解不多。

谢谢。

在Constructor/XAML中添加控件/usercontrols VS在WPF窗口的Loaded Event中添加

将窗口内容的加载推迟到窗口显示之后并没有本质上的错误。您可能想要的事件是ContentRendered,它告诉窗口的句柄已经创建,并且显示窗口。

我建议将窗口的内容封装在一个"视图"中,比如UserControl,这样您只需要设置窗口的Content并完成它,而不是强制注入多个控件。这只会让事情变得更简单。从本质上讲,让视图成为用户控件,并将窗口视为视图的宿主。

所有这些都不可能减少填充窗口所需的时间,但至少在处理内容时,您可以向显示一些内容,即使它只是一个带有等待光标的空窗口。

此外,寻找在UI therad上执行昂贵操作的任何地方(例如,在视图或视图模型中),并考虑用异步操作替换这些操作。您可能会发现,您能够比底层数据更快地加载UI,在这种情况下,您可以显示一个更完整的视图,并带有适当的等待/进度指示器,直到您的数据进入。