1

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

用户控件1.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);
}
4

1 回答 1

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();
于 2012-08-19T19:24:06.780 回答