2012-02-08 5 views
1

私は曲線を描くカスタムコントロールを操作しています。クリックすることで曲線のプロパティを変更できます。今ではカーブ自体のイベントをキャプチャするのが非常に難しいので(ユーザーの要求に応じて)グラフコントロール内のマウスポインタの近くでビジュアル/フレームワーク要素を取得する方法

どうにか私は曲線のヒットの選択を増やしたいです。 私はそれのための解決策を持っていますが、私は私のグラフに膨大な数の曲線を持っているので、本当に高価です。 Thatzなぜ私はマウスポインターの周りの限られた曲線を見つけることができるロジックを探しています。

HitTest()を試しましたが、うまくいきませんでした。 私は解決策のために多くのグーグルを得たが、利益は得られなかった。

誰かがこのトピックに光をあてて、私に正しい方向を示せばそれは大きな助けになるでしょう。

ありがとうございます。

答えて

0

この機能を自分で実装する必要があります。あなたが行うことができることは、根底にある行のMouseEnter/MouseLeaveを聞いて、最初のMouseEnter/Leaveの特定の半径内にマウスを置くと、これをヒットとしてカウントします。擬似コードで例えば

、:

OnMouseEnter() 
{ 
    this.hittestPoint = currentMousePoint; 
} 

OnMouseLeave() 
{ 
    this.hitTestPoint = currentMousePoint; 
} 

OnMouseDown() 
{ 
    // Looking for mousedown within a 5 pixel radius of the line. 
    // Increase/decrease according to experimentation 
    const double radius = 5; 

    // Note see Euclidean distance for distance between vectors 
    // http://en.wikipedia.org/wiki/Euclidean_distance 
    double deltaX = (hitTestPoint.X - currentPoint.X); 
    double deltaY = (hitTestPoint.Y - currentPoint.Y); 
    double distance = Math.Sqrt(deltaX*deltaX + deltaY*deltaY); 

    if(distance < radius) 
    { 
     // Hittest detected! 
    } 
} 
+0

があなたの指導のためにあなたの博士アンドリュー・バーネット・トンプソンありがとう、それは偉大な提案だった、私はほぼ同じソリューションを実現しますがOnMouseHover使用していた、私はMouseEnterイベントを推測し、 MouseLeaveはホバーよりも優先順位が高くなりますが、これは機能の使い勝手を確実に改善します。もう一度ありがとう.... :) – Pank

+0

心配と喜んで助けになる!時にはハックであると知覚する人たちは実際には非常に巧妙な解決策です;-) –

+0

あなたは絶対に真実です、私が見つけた解決策は、フレームワークによって提供される解決策を見つけることができなかったので、ハックです。あなたの提案はそれよりも優れたハックであることが判明し、うまくいきます。 – Pank