如何在显示子窗口时将焦点设置在文本框上

时间:2011-09-05 22:06:02

标签: silverlight

启动我的silverlight应用程序时,会出现一个子窗口,提示用户登录。在窗口中我有一个我想要聚焦的用户名文本框,这样用户就可以开始输入而无需先用鼠标聚焦。

这似乎应该有效:

public partial class LoginForm : ChildWindow
{
    public LoginForm()
    {
        InitializeComponent();
    }

    private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
    {
        txtUsername.Focus();
    }
}

我注意到Load事件发生在窗口呈现之前可能是问题,但我没有看到Rendered或类似的事件处理程序。

编辑:忘记提及此应用程序正在浏览器中运行。

6 个答案:

答案 0 :(得分:3)

您需要在txtUsername上设置TabIndex,其值低于该子窗口上的其他控件。

答案 1 :(得分:1)

试试这个:

public partial class LoginForm : ChildWindow
{
    public LoginForm()
    {
        InitializeComponent();
         Loaded+=LoginFormLoaded;
    }
       private void LoginFormLoaded(object sender, RoutedEventArgs e)
    {
         txtUsername.Focus();
         Loaded-=LoginFormLoaded;
    }

}

更新: 您还可以在TextBox上添加事件。文本框也有一个Loaded事件。如果您使用此事件,则可以确保已加载TextBox。

答案 2 :(得分:0)

这是我使用的东西:

public partial class LoginForm : ChildWindow 
{ 
    public LoginForm() 
    { 
        InitializeComponent(); 
        Loaded += (s, e) =>
        {
           txtUsername.Focus();
        }; 
    }
} 

在XAML中,将TabIndex设置为1

答案 3 :(得分:0)

如果您在浏览器中运行应用程序,请确保在调用控件的焦点方法之前silverlight插件具有焦点。

private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{         
    HtmlPage.Plugin.Focus();
    txtUsername.Focus();
}

这适用于大多数浏览器,但我无法在Safari上使用它。

答案 4 :(得分:0)

由于某些原因我没有时间弄清楚,Silverlight SDK中的子窗口打开,动画,焦点移动到某个未知的地方。在这个线程上建议的大多数解决方案对我来说都不起作用,因为控件会短暂地获得焦点(你可以看到焦点点击文本框),然后焦点移动到其他地方(我猜测ChildWindow模板上的故事板有与此有关)。所以,我想出了这个工作,这个实际代码已经实现并且已被证明有效:

public NewChildWindow()
{
    InitializeComponent();
    this.GotFocus += NewChildWindow_GotFocus; 
}

private void NewChildWindow_GotFocus(object sender, RoutedEventArgs e)
{
    this.GotFocus -= NewChildWindow_GotFocus;
    txtBoxToFocusOn.Focus();
}

答案 5 :(得分:0)

制作文本框TabIndex =" 0"并在其Loaded事件中执行" YourtxtBox.Focus()"