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

时间:2013-01-14 04:48:21

标签: c# windows-store-apps

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

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

...但是当页面显示时,textBoxGroupName没有焦点。为什么不呢?

2 个答案:

答案 0 :(得分:4)

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">

答案 1 :(得分:2)

只能选择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);
}