【发布时间】:2022-12-15 13:05:15
【问题描述】:
我正在尝试在窗口准备好时执行代码。
具体来说,我试图使窗口最大化。问题是我无法在 InitializeComponent 之后同步运行此代码,因为它太早了(窗口尚未准备好/加载/显示,因此设置 Presenter 无效)
问题是 Window.Loaded 事件似乎没有被 WinUI 3(版本 1.0)公开。
所以这是我目前的技巧。在构造函数中(InitializeComponent 之后),我挂接到 WinUI 3 公开的唯一事件之一,Activated
Activated += MainWindow_Activated_FirstTime;
问题是,只要窗口聚焦,它就会触发,几乎。所以解决方法是我只删除事件处理程序内部的事件处理程序
private void MainWindow_Activated_FirstTime(object sender, WindowActivatedEventArgs args)
{
SetupWindow();
Activated -= MainWindow_Activated_FirstTime;
}
(SetupWindow设置窗口演示者)
现在,就像我说的,这个作品,但我认为这很老套。我想知道是否有一种正确的方法可以连接到 Loaded 或某些等效事件,如 Ready 或 Rendered。只要比这更好,我真的不在乎我喜欢什么。
【问题讨论】:
-
你不能在初始化窗口时设置那个状态吗?例如。
Window window1 = new Window(); window1.State = WindowState.Maximize; window1.Show();(代码只是为了演示,不知道winui-3中的语法。 -
我认为您的解决方案根本不是“hacky”。我没有看到任何其他事件可以用来代替 Loaded。