2017-11-08 20 views
0

私は問題をLinqPadに落として実行することができます。MDI内のElementHostのWPFコントロールを介してタブ移動すると、他のMDI子にフォーカスが移動する

問題は、WinFormsのMDI子内でホストWPFのコントロールをするとき、私のタブです - フォーカスが私の例では、すべてのWinFormsである第二MDI子(にジャンプした時点で、最後までテキストボックスの間でフォーカスが移動し、テキストボックス間のタブ移動がうまく機能します。)

どのようにして、1つのMDI子から別のMDI子へのWPFタブ移動を防止し、代わりにWPFテキストボックスにフォーカスを維持できますか。 (ElementHostはその後、理想的にフォーカスが戻って最初のWinFormsに、その後のWinFormsからWPFへのリサイズに旅行をするだろう後の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

これは必ずしも元の質問への答えはありませんが、私は私のアプリケーションで回避策を実装しました。 WinFormボタンを作成し、それをフォームコントロールコレクションの最後のコントロールとして追加すると、フォーカスがWPFからこのコントロールに送信され、フォームの最初のコントロールに正しく戻されます。私はコントロールを画面外に配置しましたが、「解決策」は少し醜いです。私がこれをタイプするとき、私はこのコントロールのTabStopをfalseにセットすることができるかどうか疑問に思っています。そして、WinForms/WPFフォーカスコードがフォーカスを正しく動かすだけで十分ですか?

関連する問題