为什么在OnNavigatedTo()事件中设置焦点不设置焦点?

本文关键字:设置 焦点 事件 OnNavigatedTo 为什么 | 更新日期: 2023-09-27 17:52:41

我在一个页面的OnNavigatedTo()事件中得到了这个代码:

if (string.IsNullOrWhiteSpace(textBoxGroupName.Text))
{
    textBoxGroupName.Focus(FocusState.Programmatic);
}

…但是textBoxGroupName在页面显示时没有焦点。为什么不呢?

为什么在OnNavigatedTo()事件中设置焦点不设置焦点?

OnNavigatedTo发生在页面生命周期的早期,用于设置焦点工作。您应该调用Loaded事件中的代码:

private void MainPage_OnLoaded(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrWhiteSpace(textBoxGroupName.Text))
    {
        textBoxGroupName.Focus(FocusState.Programmatic);
    }
}

当然,您需要在.xaml文件中设置处理程序(我省略了Page元素中的其他属性:

<Page
    Loaded="MainPage_OnLoaded">

只有包含在GroupBox控件中的控件可以被选择或接收焦点。似乎你没有正确使用GroupBox。

从MSDN

完整的GroupBox本身不能被选择或接收焦点。有关此控件如何响应Focus和Select方法的更多信息,请参阅以下控件成员:CanFocus, CanSelect, Focused, ContainsFocus, Focus, Select。

提示:

你可能想使用Controls属性来访问子控件:

if (string.IsNullOrWhiteSpace(textBoxGroupName.Text))
{
    var child_TextBox = textBoxGroupName.Controls["myTextBox"]
    if(child_TextBox.CanFocus)
        child_TextBox.Focus(FocusState.Programmatic);
}