我的主窗口有一个内容控件,我将用户控件加载到其中。我无法看到将焦点设置为用户控件中的文本框。我尝试了几种建议的方法,例如textBox1.Focus()
和Keyboard.Focus()
以及FocusManager.SetFocusedElement()
,但它们似乎不起作用。
如果有更好的方法,我不会加载这种加载用户控件的方式。似乎我遗漏了关于焦点或ContentControl的一些非常基本的东西,所以我想我会问专家而不是继续枪杀这个问题。
有什么想法吗?
MainWindow.xaml:
<Grid>
<ContentControl Name="NavFrame"/>
</Grid>
MainWindow.xaml.cs:
protected override void OnInitialized(EventArgs e)
{
this.NavFrame.Content = new UserControl1();
base.OnInitialized(e);
}
UserControl1.xaml:
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="93,79,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
</Grid>
UserControl1.xaml.cs:
protected override void OnInitialized(EventArgs e)
{
textBox1.Focus();
// FocusManager.SetFocusedElement(this, textBox1);
// Keyboard.Focus(textBox1);
base.OnInitialized(e);
}
答案 0 :(得分:1)
如果您将textBox1.Focus()
放入用户控件的加载事件而不是OnInitialized
,它似乎可以正常工作。
<UserControl ...
Loaded="UserControl_Loaded">
<Grid>
<TextBox Name="textBox1" />
</Grid>
</UserControl>
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
textBox1.Focus();
}
如果您想关注OnLoad以外的其他时间,那么这样的事情也很简单......
UserControl1.xaml.cs:
public void FireTextBoxFocus()
{
textBox1.Focus();
}
MainWindow.xaml.cs:
UserControl1 ctrl = new UserControl1();
ContentControl1.Content = ctrl;
ctrl.FireTextBoxFocus();