Zoo*_*Way 13 .net wpf windowsformshost tab-ordering winforms
在a WindowsFormsHost和选项卡导航中托管WinForms表单时遇到了问题.要解决我已经做了这个简单的例子:
Window(应用程序的起点)Form了两个TextBox上面的WinFormsWindowsFormsHost到它OnLoaded处理程序Textbox定位在WindowsFormsHost在OnLoaded我得到的处理程序中:
System.Windows.Forms.Form f = new WinFormsForm();
f.TopLevel = false;
f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.windowsFormsHost1.Child = f;
Run Code Online (Sandbox Code Playgroud)
当我现在运行应用程序时:
TextBox在WindowsFormsHost,它获得焦点(OK)TextBox中WindowsFormsHost(OK)TextBox的WindowsFormsHost(不 ok了;应该已经离开WindowsFormsHost,并在WPF窗口底部给予重点的文本框)WindowsFormsHost),它得到焦点(确定)WindowsFormsHost- 因为它应该在结束后开始.所以这也没关系WindowsFormsHost(ok)WindowsFormsHost(去在WFH开始)(未确认)如果我只有一种类型的控件,我如何使焦点行为?在这种情况下,意味着WFH-1st-Textbox,WFH-2nd-Textbox,WPF-Textbox的Tab键顺序.
根据我发现的文章,这似乎无法实现.根据MSDN博客条目(部分Hwnds),Windows窗体控件始终位于层次结构中的WPF控件之上.的MSDN文章(来自WPF消息循环部分,获取消息)指出,在一个WindowsFormsHost元素中发生的事件将前WPF甚至意识到它们进行处理.
所以我假设通过按TAB键触发的事件由WindowsFormsHost元素处理(导致其他文本框的焦点).在封闭的WPF窗口中,永远不会遇到该事件,因为"它已被处理".另一方面,当您按下WPF文本框中的TAB键时,WPF正在处理事件本身并正常处理控制链.有了这个,焦点将转到WindowsFormsHost元素中的文本框,从那里你不能使用键盘离开它.
我知道这不会对你当前的问题有所帮助,但我希望它能解释一些问题.
ADDENDUM 如果您不依赖于使用表单控件,则可以将其更改为WinForms用户控件,其中包含相同的控件元素.之后,您可以通过以下方式更改WindowsFormsHost元素的初始化:
System.Windows.Forms.UserControl control = new WinFormUC();
windowsFormsHost1.Child = control;
Run Code Online (Sandbox Code Playgroud)
WinFormUC类是我的WinForms用户控件,包含上面提到的文本框.在我的测试中,无论是Winforms还是WPF文本框,按下TAB键都会一个接一个地聚焦文本框.
| 归档时间: |
|
| 查看次数: |
5366 次 |
| 最近记录: |