C# 如何在自定义对话框中聚焦文本框

C# 如何在自定义对话框中聚焦文本框,c#,wpf,focus,C#,Wpf,Focus,我有一个WPF C#桌面应用程序,并弹出一个自定义对话框窗口。对话框窗口有一个我想关注的文本框,所以一旦它弹出,我就可以在其中键入内容,而无需移动和指向光标 对话框在代码隐藏(而不是XAML)中作为类编写,如下所示: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); CustomDialog dlg = new Custo

我有一个WPF C#桌面应用程序,并弹出一个自定义对话框窗口。对话框窗口有一个我想关注的文本框,所以一旦它弹出,我就可以在其中键入内容,而无需移动和指向光标

对话框在代码隐藏(而不是XAML)中作为类编写,如下所示:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        CustomDialog dlg = new CustomDialog();
        dlg.ShowBox();  // after the dialog box pops up, focus on the textbox.
    }
}

public partial class CustomDialog : Window
{
    ....
    TextBox tb = new TextBox();
    ....
    public void ShowBox()
    {
       ....
       /* I want to focus on the tb as soon as CustomDialog.ShowBox() is called */
       ....
    }
}
我尝试了以下所有方法,但均无效:

1. tb.Focus();
2. Keyboard.Focus(tb);
3. FocusManager.SetIsFocusScope(tb, true);
4. Dispatcher.BeginInvoke((ThreadStart)delegate
{
   tb.Focus();
});
[回答]

在显示对话框之前必须聚焦:

tb.Focus();
window.ShowDialog();

您可以覆盖已加载的事件,并将文本框集中在其中:

protected override void OnLoad(EventArgs e)
{
   base.OnLoad();

   tb.Focus();
   tb.SelectAll();
}

文本框未聚焦,因为窗口的内容尚未渲染。尝试使用CustomDialog类的已加载事件聚焦文本框。将事件处理方法连接到加载的事件,并在该方法中聚焦文本框

public partial class CustomDialog : Window
{
    ....
    TextBox tb = new TextBox();
    ....
    public void ShowBox()
    {
       ....
       this.Loaded += CustomDialog_Loaded;
       ....
    }
}

void CustomDialog_Loaded(object sender, RoutedEventArgs e)
{
    tb.Focus();
}

我只是想补充一点,我试图在弹出对话框中“聚焦”一个文本框,但它不起作用。 在调用Form.ShowDialog()之前,我试图聚焦该框

上述措施都不起作用

以下是对我有效的方法:

//add textBox to form
myForm.Controls.Add(myTextBox);

//now select the textbox
myTextBox.Select();

//display the form
myForm.ShowDialog();

希望这有帮助

tb.UpdateLayout();tb.Focus();试试这个你能在UI中看到文本框吗?当然我能看到文本框simple
tb.Focus()
适合我。能否向我们展示创建TB并将其添加到window+XAML中的代码?@Faciu:dialog box类中有on-OnLoad事件。