2017-06-22 52 views
0

如果我有一個Windows窗體控件是這樣的:爲什麼Windows窗體控制WPF窗口中的塊預覽事件?

 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之前應該收到事件嗎?這裏發生了什麼?

回答

1
+0

雖然這並沒有解決隧道和預覽事件直接,但它仍然揭示了這個問題的一些情況。如果將它們視爲單獨的窗口,那麼隧道將不適用,因爲WinForms控件不被視爲WPF窗口的子項,因此不會參與隧道,目標定位或冒泡。這也解釋了爲什麼該控件出現在所有WPF控件之前,無論您如何設置它們。 –

+1

他們已經盡最大努力將來自兩個不同世界的東西粘合在一起。 :)事件隧道的概念在WinForms中甚至沒有形成,對吧?哦,是的,我意識到你的問題是爲什麼預覽事件不會從WPF視覺樹的根元素中解僱,我沒有 – kennyzx