代码之家  ›  专栏  ›  技术社区  ›  Kishore Kumar

WindowsFormHost不允许控件位于顶部?

wpf
  •  0
  • Kishore Kumar  · 技术社区  · 14 年前

    我正在使用动画显示自定义的ShowDialog弹出窗口(带有文本块和按钮的边框控件)。在获取winformhost之后,如果iam运行动画,则边框控件和其他控件将位于winformhost后面。这附近有场地吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Ian Griffiths    14 年前

    如果希望WPF和Windows窗体内容共享同一窗口,则没有解决方法。

    WPF通过Direct3D进行渲染,而Windows窗体使用gdi+,这最终基于旧的gdi32渲染机制。Windows本身不提供使用这两种不同技术渲染窗口的同一区域的方法-您最终得到的是Direct3D拥有和渲染的Hwnd(由WPF使用),以及Windows窗体拥有和渲染的不同Hwnd。这些硬件在它们之间的包含窗口中分割出空间,不能重叠。

    如果要重叠WPF和Windows窗体内容,唯一支持的方法是将它们放在单独的顶级窗口中-Windows 在桌面级别支持重叠的win32和direct3d内容。您可以使用每像素透明度来制作非矩形窗口(WPF或Windows窗体)。因此,您可以关闭WPF应用程序中的所有窗口边框,并使背景透明,如果启用了透明,则可以将该窗口与Windows窗体窗口在屏幕上完全相同的位置放置,此时,您可以将WPF内容放在Windows窗体内容的顶部。

    不用说,这是一件乏味的事情。但不幸的是,如果您真正需要Windows窗体内容之上的WPF内容,那么您需要这样做—您需要将WPF内容放在单独的窗口中。