【问题标题】:WinUI 3 1.0 : Window Ready EventWinUI 3 1.0:窗口就绪事件
【发布时间】: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 或某些等效事件,如 ReadyRendered。只要比这更好,我真的不在乎我喜欢什么。

【问题讨论】:

  • 你不能在初始化窗口时设置那个状态吗?例如。 Window window1 = new Window(); window1.State = WindowState.Maximize; window1.Show();(代码只是为了演示,不知道winui-3中的语法。
  • 我认为您的解决方案根本不是“hacky”。我没有看到任何其他事件可以用来代替 Loaded。

标签: c# winui-3


【解决方案1】:

如果您已将窗口的 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(() =>
        {
            //...
        }));
}

【讨论】:

    【解决方案2】:

    从Win App Sdk 1.1.3开始,该事件现已公开

    <Window
        x:Class="WindowsAppSdkTouchUI.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:AppExample"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
        mc:Ignorable="d"
        Closed="Window_Closed"
        Activated="Window_Activated"> 
    
    </Window>
    

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多