假设有一个窗口,在窗口中我们有一个控件。如果我们取一个控件,那么它可以用来确定它的主父窗口——一个窗口,具有以下功能:
var window = Window.GetWindow(control);
因为我们在 WPFVisualTree中有一个很棒的东西,你可以左右上下走动。
但我们并不是在寻找简单的方法,用 WinForms 编写的一个有胡子的遗留项目由 WPF 中的功能补充。
我们在 winforms 上有一个选项卡,里面是一个 WPF 用户控件。显然那是GetWindow行不通的。如何确定父窗口?对于behavior'a的实施是非常必要的。假设是到达最顶端 - UserControl 并尝试从中获取其持有者,然后使用 Winforms 方法获取父窗口。
起初我想挖一边
WinApi,但我放弃了这个想法,因为我需要从父窗体中捕获事件,并且AddHookRemoveHook通过我需要的巨大case的东西来做和处理并不是最优的,并且可能会混淆下一个打开代码的 pogromist。在互联网和 StackOverFlov 的狂野中,找到了一个解决方案:
它的工作方式简单明了 - 只需 4 行,而不是在一堆带有窗口句柄和消息处理定义的行中。