【发布时间】:2018-10-05 12:07:49
【问题描述】:
我已将我的自定义 winform 控件托管到 WPF 项目中。我已经处理了自定义控件的 KeyDown 事件,以便在按下 Tab 或 Shift+Tab 键时导航到下一个控件。
这是我处理 Tab 键的代码,
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Handled)
return;
if (this.AllowStandardTab)
{
Form form = this.FindForm();
if (form != null)
{
if (e.KeyData == (Keys.Tab | Keys.Shift))
{
form.SelectNextControl(this, false, true, false, true);
return;
}
else if (e.KeyData == Keys.Tab)
{
form.SelectNextControl(this, true, true, false, true);
return;
}
}
}
}
它在 winforms 中正常工作并导航到下一个控件。但它不适用于托管的 wpf 项目。
如何检测控件是否托管在 wpf 中,并在按下 Tab 键时将焦点移动到下一个 wpf 窗口?
【问题讨论】:
-
也许您的控件会覆盖 IsInputKey 并始终为 Keys.Tab 返回 true?也许您应该根据您的 AllowStandardTab 状态在此处返回 true/false,以便进行默认处理。我怀疑 WFH 正确处理 ProcessDialogKey 而您的实现特定于 WF。当您的控件托管在 WPF 窗口中时,上面的表单将为空。