【发布时间】:2017-11-08 12:26:08
【问题描述】:
我已将我的问题简化为下面的代码,只需将其放入 LinqPad 并运行即可。
问题是当我在 WinForms MDI 子项中托管的 WPF 控件中进行切换时 - 焦点在文本框之间移动,直到最后一个 焦点跳转到第二个 MDI 子项(在我的示例中文本框之间的所有 WinForms 和制表符都可以正常工作吗。)
如何防止 WPF 选项卡从一个 MDI 子级交换到另一个子级,而是将焦点保留在 WPF 文本框中。 (如果 WinForms 控件出现在 ElementHost 之前/之后,那么理想情况下,焦点将从 WinForms 转移到 WPF 再到 WinForms,然后返回到第一个 WinForms。)
var mdiParent = new Form();
mdiParent.IsMdiContainer = true;
mdiParent.Width = 800;
mdiParent.Height = 600;
mdiParent.Show();
var otherChild = new Form();
otherChild.MdiParent = mdiParent;
var flow = new FlowLayoutPanel();
flow.Controls.Add(new TextBox());
flow.Controls.Add(new TextBox());
flow.Controls.Add(new TextBox());
otherChild.Controls.Add(flow);
otherChild.Show();
var form = new Form();
form.MdiParent = mdiParent;
var elementHost = new ElementHost();
elementHost.Dock = DockStyle.Fill;
form.Controls.Add(elementHost);
string xaml = @"
<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
";
elementHost.Child = (UIElement)System.Windows.Markup.XamlReader.Load(new XmlTextReader(new StringReader(xaml)));
form.Show();
【问题讨论】: