我有一个简单的ChildWindow弹出在Silverlight 4(测试版)。
out-of-browser重要:--这是一个应用程序。
打开窗口时,我希望自动将焦点设置在TextBox控件上。
我试过几件事:
下面的代码似乎什么也不做。我认为在“加载”之后,控件还没有准备好被聚焦。
private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{
textBox1.Focus();
}这很管用,但它很酷。
private void ChildWindow_GotFocus(object sender, RoutedEventArgs e)
{
if (_firstTime == true) {
textBox1.Focus();
_firstTime = false;
}
}有没有更好的办法?在WinForms,我总是不得不做这样的可怕的事情,但我希望不再这样做了。
注意:此similar question仅适用于浏览器。它建议调用System.Windows.Browser.HtmlPage.Plugin.Focus();,这是不工作的,事实上,在Silverlight 4测试版浏览器外运行时会出现错误。
发布于 2011-02-11 06:23:50
我在SilverLight 4 (OOB)中也有同样的问题,我注意到制表符序列会将焦点设置到一个我看不到的控件上。所发生的事情似乎是将焦点设置为您的控件(首先是选项卡序列中的一个),然后由于某种原因焦点移动到ContentControl (name ="content"),后者(我认为)是子窗口的父窗口。
默认情况下,ContentControl有IsTabStop=true。你看..。要为应用程序中的所有Why would I want IsTabStop set to true on a ContentControl?设置ContentControl.IsTabStop = false,请将其添加到styles.xaml中。
<Style TargetType="ContentControl" >
<Setter Property="IsTabStop" Value="false"/>
</Style>同样的问题发生在MainPage上的制表符序列上。此样式也将修复此问题。
发布于 2010-01-29 19:24:09
你走在正确的轨道上。您需要处理两个测试用例:
您在加载事件中显示的代码将在浏览器之外正常工作。所有需要做的就是重构它来处理这两种情况:
private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{
if (App.current.IsRunningOutOfBrowser)
{
textBox1.Focus();
}
else
{
System.Windows.Browser.HtmlPage.Plugin.Focus();
textBox1.Focus();
}
}这应该对你有好处。
发布于 2011-12-02 09:27:45
感谢所有的帖子,但是在做了一些调查之后,下面的事情对我很有帮助
在萨马勒:
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" FontFamily="Arial" FontSize="12" Height="25" Width="200" Margin="38,50,0,0" Name="txtUserName" Text="{Binding LoginInfo.UserName,Mode=TwoWay, NotifyOnValidationError=True}" IsTabStop="True" TabIndex="1" ></TextBox>
// Initialiazing Main Part View Model
/// </summary>
/// <param name="mainPartViewModel"></param>
public ChildWindowLoginControl(MainPartViewModel mainPartViewModel)
{
InitializeComponent();
this.DataContext = mainPartViewModel;
System.Windows.Browser.HtmlPage.Plugin.Focus();
this.GotFocus += (s, e) => { txtUserName.Focus(); };
}https://stackoverflow.com/questions/1892891
复制相似问题