/ / Табулиране чрез WPF контроли в ElementHost в MDI Детето кара фокуса да се премести в друго MDI Child - wpf, winforms

Таблиране чрез контроли на WPF в ElementHost в MDI Детето причинява фокус да се премести в други MDI Child - wpf, winforms

Аз опростих проблема си до кода по-долу, който може просто да бъде пуснат в LinqPad и да се изпълни.

Проблемът е, когато аз преминете през WPF контролите, които се намират вътре в детето WinForms MDI - фокусът се мести между текстовите полета до последното, в което точка фокусът скача към второто дете MDI (което в моя пример е всички WinForms и табулиране между текстовите полета работи добре там.)

Как мога да предотвратя размяната на WPF tabbing отедно 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();

Отговори:

0 за отговор № 1

Това не е задължително отговор на оригиналавъпрос, но въпреки това приложих решението си в молбата си. Чрез създаването на WinForm бутон и добавянето му като последен контрол в колекцията Forms controls, фокусът се изпраща от WPF към този контрол и след това се връща обратно към първия контрол на Form правилно. Аз поставих контрола извън екрана, но "решението" е малко грозно. Тъй като пиша това, аз също се чудя дали мога да настроя TabStop на този контрол на фалшиво и това е просто съществуване за WinForms / Кодът за фокусиране на WPF, за да преместите фокуса правилно?