无法将焦点设置在文本框上

时间:2012-08-19 19:14:45

标签: wpf focus

我的主窗口有一个内容控件,我将用户控件加载到其中。我无法看到将焦点设置为用户控件中的文本框。我尝试了几种建议的方法,例如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);
}

1 个答案:

答案 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();