【问题标题】:Adding controls/usercontrols in Constructor/XAML VS adding controls in Loaded Event in WPF window在 Constructor/XAML 中添加控件/用户控件 VS 在 WPF 窗口的 Loaded Event 中添加控件
【发布时间】:2014-12-15 12:49:20
【问题描述】:

我想知道在 XAML 或构造函数中添加一些控件/用户控件(需要时间来初始化)和在某些窗口的 Loaded 事件中是否有任何区别。

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

由于我对此不太了解,因此我想听听专家对此主题的一些建议。

谢谢。

【问题讨论】:

  • 我很欣赏一些用户的反对意见,因为他们是这个主题的专家。如果您想对这个问题投反对票,请分享您的知识。我真的很感激。 :) 这将帮助我提高我的知识。
  • 为什么控件/用户控件要花这么长时间才能加载?
  • 询问“我从哪里开始”的问题通常过于宽泛,不适合本网站。人们有自己解决问题的方法,因此不可能有正确的答案。好好阅读Where to Start,然后写下你的帖子。
  • @m-y - 它们是视口(就像我们在 AutoCAD 中一样),我无法更改它们,因为它们是第三方控件。所以,我必须考虑加载这些用户控件。

标签: c# wpf xaml user-controls


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在 Loaded 事件中加载这些控件。不是直接在加载事件中,而是加载完成后,我使用异步方法加载这些控件。这让我在这些用户控件仍在另一个线程上加载时执行其他操作。 :)
  • 你不能在单独的线程上加载用户控件;它们必须在用于显示它们的同一线程上创建和填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多