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

Avalonia窗体中如何强制让TextBox获取键盘输入焦点

让Avalonia窗体显示时TextBox自动获取焦点

我有一个仅包含单个TextBox的Avalonia窗体,窗体显示时输入框不会自动获得键盘焦点,必须按Tab键才能输入内容,如何让TextBox在窗体显示时自动获取焦点?

原始AXAML代码

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="SpaceDunyal.Forms.Window1"
        Title="MyWindow">
    <StackPanel Margin="10">
        <TextBox Name="MyInput" Watermark="Input your text"/>
    </StackPanel>
</Window>

原始C#代码

using Avalonia.Controls;

namespace SpaceDunyal.Forms
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            MyInput.Focus(); // 无效果
        }
    }
}

解决方案

方案1:通过AXAML直接设置初始焦点

在Window标签中添加FocusManager.FocusedElement属性,绑定到目标TextBox,无需编写C#代码即可实现自动聚焦:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="SpaceDunyal.Forms.Window1"
        Title="MyWindow"
        FocusManager.FocusedElement="{Binding ElementName=MyInput}">
    <StackPanel Margin="10">
        <TextBox Name="MyInput" Watermark="Input your text"/>
    </StackPanel>
</Window>

方案2:在窗体加载完成后调用Focus

原始代码中MyInput.Focus()无效的核心原因是:Window构造函数执行时,控件还未完全加载到可视化树,布局也未完成,此时调用焦点设置不会生效。需要在窗体加载完成后再执行聚焦操作,有两种实现方式:

方式A:重写OnLoaded方法

using Avalonia.Controls;

namespace SpaceDunyal.Forms
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        protected override void OnLoaded(RoutedEventArgs e)
        {
            base.OnLoaded(e);
            MyInput.Focus();
        }
    }
}

方式B:订阅Loaded事件

using Avalonia.Controls;
using Avalonia.Interactivity;

namespace SpaceDunyal.Forms
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            Loaded += Window1_Loaded;
        }

        private void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            MyInput.Focus();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:50