c# - WinUI 3 1.0 : Window Ready Event

标签 c# winui-3

我试图在窗口准备好时执行代码。

具体来说,我正在尝试使窗口最大化。问题是我无法在 InitializeComponent 之后同步运行此代码,因为它太快了(窗口尚未准备好/加载/显示,因此设置 Presenter 无效)

问题是 WinUI 3(版本 1.0)似乎没有公开 Window.Loaded 事件。

这是我当前的技巧。在构造函数中(在 InitializeComponent 之后),我 Hook 了 WinUI 3 公开的唯一事件之一,Activated

Activated += MainWindow_Activated_FirstTime;

问题是,只要窗口聚焦,它就会触发,几乎。所以解决方法是我只是删除事件处理程序内的事件处理程序

private void MainWindow_Activated_FirstTime(object sender, WindowActivatedEventArgs args)
{
    SetupWindow();
    Activated -= MainWindow_Activated_FirstTime;
}

(SetupWindow 设置窗口呈现器)

现在,就像我说的,这有效,但我认为它非常hacky。我想知道是否有正确的方法来 Hook Loaded 或者一些等效的事件,例如 ReadyRendered。我真的不在乎我喜欢什么,只要它比这更好。

最佳答案

如果您已将窗口的 Content 属性设置为 FrameworkElement,例如任何类型的 Panel,您可以处理此事件的 Loaded 事件。

您还可以使用 DispatcherQueue 将一些低优先级的工作排入队列,以便在调度程序线程准备好后立即完成:

public MainWindow()
{
    this.InitializeComponent();
    Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread().TryEnqueue(
        Microsoft.UI.Dispatching.DispatcherQueuePriority.Low,
        new Microsoft.UI.Dispatching.DispatcherQueueHandler(() =>
        {
            //...
        }));
}

关于c# - WinUI 3 1.0 : Window Ready Event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71181437/

相关文章:

c# - 如何让控制台应用程序运行直到用户输入 "Q"、 "q"、 "Quit"或 "quit"以终止它?

c# - 性能 - 使用 Guid 对象或 Guid 字符串作为键

xaml - VS 17.1.2 更新后出现 WinUI3 EntryPointNotFoundException

c# - 如何使用文件组描述符将文件拖到资源管理器 C#

c# - 使用 LINQ 和 Lambda 加入/在何处

c# - 带有 AccessText 的 wpf xaml 按钮似乎不查询 CanExecute

.net - 如何在 WinUI 3 中使用 DrawingVisual 类?

winapi - 如何覆盖启动 WinUI 3.0 桌面应用程序

window - 如何获取承载 UIElement 实例的窗口

c# - WInUI 3.0 桌面 - 尝试导航时出现异常崩溃