我有一个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();
答案 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
希望这有帮助!