You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3:窗口加载时设置文本框控件焦点失败求助

WinUI 3 窗口加载后设置文本框焦点的解决方案
  • 构造函数和Activated事件触发时,目标控件txtLogin往往还没完成布局渲染或交互准备,这是焦点设置失效的核心原因。以下是几种可行的解决办法:
  1. 绑定控件的Loaded事件
    这个事件会在控件完全加载并就绪后触发,此时设置焦点能确保生效。可以在后台代码中注册事件:

    txtLogin.Loaded += (sender, e) =>
    {
        txtLogin.Focus(FocusState.Programmatic);
    };
    

    也可以直接在XAML里给txtLogin添加Loaded事件绑定:

    <TextBox x:Name="txtLogin" Loaded="TxtLogin_Loaded" />
    

    然后在对应方法中执行焦点设置:

    private void TxtLogin_Loaded(object sender, RoutedEventArgs e)
    {
        txtLogin.Focus(FocusState.Programmatic);
    }
    
  2. 通过DispatcherQueue延迟执行
    如果想继续使用窗口的Activated事件,可以借助DispatcherQueue以低优先级延迟执行焦点设置,等UI布局完成后再操作:

    private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
    {
        DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () =>
        {
            txtLogin.Focus(FocusState.Programmatic);
        });
    }
    
  3. 验证控件状态
    确保txtLogin的IsEnabled和IsVisible属性均为true,如果控件处于禁用或不可见状态,焦点设置会直接失败。可以在设置前添加验证:

    if (txtLogin.IsEnabled && txtLogin.IsVisible)
    {
        _ = txtLogin.Focus(FocusState.Programmatic);
    }
    

内容的提问来源于stack exchange,提问作者josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:42:11