2013-03-21 67 views
1

我有一個WPF窗口,其中還包含WindowsFormsHost(除了其他WPF控件)包裝的WinForms控件。 我想確定顯示在某個位置下的控件(WPF或WinForms)。從支持WinForms互操作的特定位置獲取控制

要接收WPF控件,我可以用

VisualTreeHelper.HitTest(wpfWindow, position) 

時候,在這個位置顯示一個WindowsFormsHost這不起作用的位置。對於這種情況,HitTest()返回一個位於WindowsFormsHost後面的WPF控件。

任何想法如何讓這個工作也互操作的場景?

回答

1

檢查位置以查看它們是否在Winform範圍內。您可以通過創建最高級WPF控件和winform之間的轉換,然後使用座標0,0來確定邊界。結合託管窗口的寬度和高度,您現在可以看到窗口的邊界。使用轉換將您的位置轉換爲最高級別的WPF控件,現在您有一種檢查位置是否在Winform範圍內的方法。

確定鼠標是否在Winform之後。 Refer to this question

如果它不在winform中,請使用VisualTreeHelper。

public Rect HostRect 
    { 
     get 
     { 
      var transform = _Host.TransformToVisual(this); 
      return new Rect(transform.Transform(new Point(0, 0)), new Point(_Host.ActualWidth, _Host.ActualHeight)); 
     } 
    } 
+0

你可以在第一部分更具體或提供一個小的示例代碼?我沒有完全明白,謝謝 – Harry13 2013-03-22 07:11:52

相關問題