gpt4 book ai didi

WPF 弹出窗口和 WindowsFormsHost 问题

转载 作者:行者123 更新时间:2023-12-04 15:49:22 31 4
gpt4 key购买 nike

我在 WPF 弹出窗口中托管 windowsforms 控件。问题如下:

  • 如果我使 StaysOpen=False 无法与 winform 控件交互。 StaysOpen 为 false 是必需的,因为当在 Popup 区域外单击时,它应该关闭。
  • 如果我使 StaysOpen=True 我可以与 winform 控件交互,但是当我在弹出窗口区域外单击时,它不会关闭。
  • 我尝试在弹出窗口的 MouseEnter 中设置 StaysOpen=true 并在 MouseLeave 中设置 StaysOpen=False,但是当鼠标位于 winform 控件上时会触发 MouseLeave,从而导致意外行为。
  • 我什至尝试了弹出窗口的 IsMouseCaptureWithin 属性,发现它不适用于 winforms(我猜它是框架中的一个错误)。
  • 另一个问题,当根主窗体(即 Windows 窗体)被停用(按 Alt+Tab)时,我试图关闭弹出窗口,但是即使我在弹出窗口中进入 windowshostControl 中的一个控件,也会触发此事件(停用)。

  • 期望的行为:
  • 应该能够在 wpf 弹出窗口中托管 Winform 控件并与之交互。
  • 在弹出窗口区域外单击时,弹出窗口应关闭。

  • 感谢任何输入。

    谢谢。

    最佳答案

    我在 WPF 中的事实上的标准弹出窗口遇到了很多问题,因为它们实际上是一个带有自己句柄的新窗口。这意味着如果您在屏幕上拖动您的应用程序,弹出窗口将保持不动(它不会随着您的窗口移动)。这也意味着您的弹出窗口有一些奇怪的行为,并且不会以其他控件通常的方式与您的应用程序交互。

    我创建了 2 个装饰器类来解决这个问题:

    PopupDecorator.cs
    TimeoutPopupDecorator.cs

    使用起来非常简单:

  • 为新的弹出类添加命名空间声明。 IE。

    xmlns:dday_wpf="clr-namespace:DDay.WPF"
  • 围绕您希望弹出窗口能够与装饰器一起显示的区域。 IE。



    ...弹出的内容在这里...

    ~面板的内容到这里~

  • 它的工作原理与普通 Popup 几乎相同从那一刻起。

    这可能无法解决您的所有问题,但希望它有所帮助。

    关于WPF 弹出窗口和 WindowsFormsHost 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185985/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com