FindForm和WPF

FindForm和WPF,wpf,winforms,Wpf,Winforms,我有一个包含WinFormmyForm的应用程序 在该WinForm中有一个WPF UserControlmyWPF 在该WPF UserControl中有一个WinForm UserControlmyWinCtrl myWinCtrl有一个自定义WinGridmyWinGrid myWinGrid在内部执行this.FindForm和。。。。找不到我的表单 有没有一种方法可以覆盖FindForm方法,以便它包含WPF中间层的可能性 因此,我需要myGrid查找myWinForm,您可以使用PI

我有一个包含WinFormmyForm的应用程序

在该WinForm中有一个WPF UserControlmyWPF

在该WPF UserControl中有一个WinForm UserControlmyWinCtrl

myWinCtrl有一个自定义WinGridmyWinGrid

myWinGrid在内部执行this.FindForm和。。。。找不到我的表单

有没有一种方法可以覆盖FindForm方法,以便它包含WPF中间层的可能性


因此,我需要myGrid查找myWinForm,您可以使用PInvoke直接获取包含控件的顶级表单

此时,您可以将生成的IntPtr与Application.OpenForms的每个表单中的句柄进行比较,以找到实际的Windows表单实例


一种可能的暴力方法是使用控制中心,然后搜索Application.OpenForms以查找包含该点的任何活动表单。棘手的部分是处理重叠表单,但只有一个表单应该是活动的,因此如果这是对UI操作的响应,则该位置的活动表单应该是正确的表单…

您可以使用PInvoke with直接获取包含控件的顶级表单

此时,您可以将生成的IntPtr与Application.OpenForms的每个表单中的句柄进行比较,以找到实际的Windows表单实例


一种可能的暴力方法是使用控制中心,然后搜索Application.OpenForms以查找包含该点的任何活动表单。棘手的部分是处理重叠的表单,但只有一个表单应该是活动的,因此如果这是对UI操作的响应,则该位置的活动表单应该是正确的表单…

效果不太好。。。GetAncenstor返回IntPtr,但这不是一个好的…,System.Windows.Forms.Integration.WindowsFormsHost也没有处理程序property@JamieKeeling:GetControlthisIntPtr至少应该是一个表单。效果不是很好。。。GetAncenstor返回IntPtr,但这不是一个好的…,System.Windows.Forms.Integration.WindowsFormsHost也没有处理程序property@JamieKeeling:GetControlthisIntPtr至少应该是一个表单。
myGrid => myWinFormUC => Host => WpfUC => Host => myWinForm