【问题标题】:Why do Windows Forms controls block preview events in a WPF window?为什么 Windows 窗体控件会阻止 WPF 窗口中的预览事件?
【发布时间】:2017-06-23 17:28:12
【问题描述】:

如果我有这样的 Windows 窗体控件:

        System.Windows.Forms.Button button = new System.Windows.Forms.Button()
        {
            Width = 1000,
            Height = 1000
        };

        Host.Child = button;

我订阅了这样的事件:

    PreviewStylusDown="Window_PreviewStylusDown"
    PreviewStylusUp="Window_PreviewStylusUp"
    PreviewTouchDown="Window_PreviewTouchDown"
    PreviewTouchUp="Window_PreviewTouchUp"

我认为我的 WPF 窗口肯定应该接收这些事件。然而,当按钮被触摸时,事件永远不会引发。

Winforms 控件如何吸收 PreviewTouchDown 之类的预览事件?如果是预览版,那不是说是在挖隧道阶段提出的吗?这是否意味着窗口应该在到达 WindowsFormsHost 之前接收到事件?这到底是怎么回事?

【问题讨论】:

    标签: c# wpf winforms xaml touch


    【解决方案1】:

    【讨论】:

    • 虽然这并没有直接解决隧道和预览事件,但它仍然对这个问题有所了解。如果将它们视为单独的窗口,则隧道不适用是有道理的,因为 WinForms 控件不被视为 WPF 窗口的子窗口,因此不会参与隧道、目标或冒泡。这也解释了为什么无论您如何尝试对它们进行分层,该控件都会出现在所有 WPF 控件的前面。
    • 他们已经尽了最大的努力将来自两个不同世界的东西粘合在一起。 :) 事件隧道的概念在 Winforms 中甚至都没有,对吧?哦,是的,我意识到你的问题是关于为什么预览事件不会从 WPF 可视化树的根元素中触发,我不知道
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多