Silverlight 如何在显示子窗口时设置文本框的焦点
启动我的silverlight应用程序时,会出现一个子窗口,提示用户登录。在窗口中,我有一个用户名文本框,我希望它能被聚焦,这样用户就可以开始键入而不用先用鼠标聚焦它 这似乎应该奏效:Silverlight 如何在显示子窗口时设置文本框的焦点,silverlight,Silverlight,启动我的silverlight应用程序时,会出现一个子窗口,提示用户登录。在窗口中,我有一个用户名文本框,我希望它能被聚焦,这样用户就可以开始键入而不用先用鼠标聚焦它 这似乎应该奏效: public partial class LoginForm : ChildWindow { public LoginForm() { InitializeComponent(); } private void ChildWindow_Loaded(object
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上试过了,但没能用。不管怎样,如果浏览器支持的话,这就是我需要的。