Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何在显示子窗口时设置文本框的焦点_Silverlight - Fatal编程技术网

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

Silverlight 如何在显示子窗口时设置文本框的焦点,silverlight,Silverlight,启动我的silverlight应用程序时,会出现一个子窗口,提示用户登录。在窗口中,我有一个用户名文本框,我希望它能被聚焦,这样用户就可以开始键入而不用先用鼠标聚焦它 这似乎应该奏效: public partial class LoginForm : ChildWindow { public LoginForm() { InitializeComponent(); } private void ChildWindow_Loaded(object

启动我的silverlight应用程序时,会出现一个子窗口,提示用户登录。在窗口中,我有一个用户名文本框,我希望它能被聚焦,这样用户就可以开始键入而不用先用鼠标聚焦它

这似乎应该奏效:

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

    private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
    {
        txtUsername.Focus();
    }
}
我注意到
Load
事件发生在渲染窗口之前,这可能是问题所在,但是我没有看到
rendered
或类似的事件处理程序

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

尝试以下操作:

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

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

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

以下是我使用的:

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

在XAML中,如果在浏览器中运行应用程序,请将您的
选项卡索引设置为1

,确保silverlight插件在调用控件的focus方法之前具有focus

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

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

由于某些原因,我没有时间去弄清楚,Silverlight SDK中的子窗口将打开并设置动画,焦点将移动到某个未知的位置。此线程上建议的大多数解决方案对我不起作用,因为控件会短暂地接收焦点(您可以看到焦点击中文本框),然后焦点移动到其他地方(我猜ChildWindow模板上的情节提要与此有关)。因此,我发现这是一个已经实现并被证明有效的实际代码:

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

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

将文本框设为TabIndex=“0”,并在其加载的事件中执行“YourtxtBox.Focus()”

在完全不同的场景中,我遇到了类似的问题。我所要做的就是修复它
e.Handled=true谢谢,我在chrome上试过了,但没能用。不管怎样,如果浏览器支持的话,这就是我需要的。