如何将TextBox集中在自定义对话框中

时间:2011-08-01 07:11:36

标签: c# wpf focus

我有一个WPF C#桌面应用程序并弹出一个自定义对话窗口。对话窗口有一个我想要关注的TextBox,所以一旦它弹出,我可以在不移动和指向光标的情况下输入内容。

DialogBox被编写为代码后面的类(不是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();
});

[ANSWER]

在显示对话框之前必须集中注意力:

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

3 个答案:

答案 0 :(得分:1)

您可以覆盖OnLoaded事件并将文本框聚焦在那里:

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

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

答案 1 :(得分:0)

文本框未聚焦,因为尚未呈现Window的内容。尝试使用CustomDialog类的Loaded事件聚焦文本框。将事件处理方法连接到Loaded事件,在该方法中,将焦点放在文本框中。

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();
}

答案 2 :(得分:0)

我只是想补充一点,我试图将一个文本框“聚焦”在一个弹出的对话框中,但它无法正常工作。 在我调用Form.ShowDialog();

之前,我试图将框对焦

以上都没有。

这对我有用:

partner_paths = ["/partner/path/1", "/partner/path/2", "/partner/path/3"]
scr_dirs = ["/dir1", "/dir2", "/dir3"]

for p_path, s_dir in zip(partner_paths, scr_dirs):
    fpath = p_path + s_dir
    print fpath

希望这有帮助!