2008-09-05 32 views

答えて

34

"WPF Unleashed" から、ページ383:

ビジュアルヒットテストは、あなたに通知することができ 場所を交差についてすべてVisual Sを、[...]あなたが使用する必要があります[...] [VisualTreeHelper.]HitTestメソッドは、 HitTestResultCallbackデリゲートを受け入れます。 このバージョンのHitTestが返される前に、 というデリゲートが、 という関連Visualのそれぞれに対して一度呼び出されます。 の最上部から最下部まで続きます。

そのようなコールバックのシグネチャは

HitTestResultBehavior Callback(HitTestResult result) 

であり、(MSDNにリンクされたページから)以下に示すように、それは、さらにヒットを受信するようにHitTestResultBehaviour.Continueを返すことがあります

// Return the result of the hit test to the callback. 
public HitTestResultBehavior MyHitTestResult(HitTestResult result) 
{ 
    // Add the hit test result to the list that will be processed after the enumeration. 
    hitResultsList.Add(result.VisualHit); 

    // Set the behavior to return visuals at all z-order levels. 
    return HitTestResultBehavior.Continue; 
} 

詳細については、MSDN documentation for VisualTreeHelper.HitTestを参照してください。

+5

良い例については、次のmsdnリンク(セクション:ヒットテスト結果コールバックの使用)を参照してください。 [http://msdn.microsoft.com/en-us/library/ms752097.aspx](http://msdn.microsoft.com/en-us/library/ms752097.aspx) –

+1

2010年版の503ページ本FYI。 – Sabuncu

+1

ほとんどの時間は必要なものではない視覚的なツリー要素が得られることに注意してください。論理ビュー要素を取得するには、ヒットの親を再帰的に検索する必要があります。 – henon

3
+0

リンクされた例で使用されているオーバーロード([おそらく答えに直接複製する必要があります](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-本当に良い答え))は、マウスの位置で一番上の要素を見つけますが、マウスの下の要素の配列ではありません。 –

36

また、マウスの下にある最上位の要素を取得するためにMouse.DirectlyOverプロパティを使用して試すことができます。

+0

これは、マウスの下に要素の配列を提供するのではなく、実際には一番上の要素だけを返します。 –

関連する問題