2011-02-01 13 views
3

フレームワークコントロールで定義されたマウスイベントを聞かずにマウスクリックを検出することは可能ですか?しかし、私は、ユーザーが画面上でクリックしたかどうかを知りたいフレームワークコントロールで定義されたマウスイベントを聴取せずにマウスクリックを検出する方法はありますか?

control.MouseLeftButtonDown += this.HandleMouseLeftButtonDown; 

私が意味する、私のようなコードを記述する必要はありません。 C#(WPFまたはSilverlight)で可能ですか?

+1

正確に何をしようとしているのか、標準的なマウスイベントの処理を避ける必要がある理由を理解していなければ、この質問に対する回答を検討することすら難しいです。難しいことをやろうとしているだけですか、ここでは特別な設計上の配慮がありますか? –

+0

@コードグレー:私はこれをしたい:Silverlightの検索ボックスのようなGoogle(http://stackoverflow.com/questions/4861221/google-like-searchbox-in-silverlight) – Nawaz

+0

@Nawaz: "だから私の質問は基本的にユーザーがちょうどクリックされ、クリックイベントが特定のコントロールの外で発生したかどうかを知る方法は?どのようにこれは正確な複製ではありませんか? –

答えて

8

クラスハンドラは、メインウィンドウの静的コンストラクタに登録できます。たとえば、

static MainWindow() { 
    EventManager.RegisterClassHandler(typeof (MainWindow), 
             Mouse.MouseDownEvent, 
             new MouseButtonEventHandler(OnGlobaMouseDown)); 
} 

すべてのMouseDownイベントのグローバルハンドラになります。

+1

ハンドラが静的メソッドである必要があるという点は良いですが、欠点かもしれません。また、おそらく登録されたハンドラーに到達するイベントが非常に少ないため、registerメソッドに 'handlesEventToo'のboolを追加することにします。 –

+0

ユーザがMainWindowの外側をクリックするとどうなりますか?ブラウザのURLボックス、OSのタスクバー、Windows 7の「スタート」ボタンなどをクリックすることができますか? – Nawaz

+0

@Nawaz - WPFアプリケーションの外部でマウスイベントを検出する必要がある場合は、Win APIを使用する必要があると思います。 James Gauntの答えを見てください。 –

1

すべてのアプリケーションのマウスイベントを処理する必要がある場合は、InputManagerイベントにサブスクライブするのが最善の方法です。

3

これは、マウスをキャプチャすることによって行われます。ウインドウの外に出てもマウスイベントがあなたに向けられるようにします。 Mouse.Capture()メソッド。

0

":

control.MouseLeftButtonDown + = this.HandleMouseLeftButtonDown私が意味する、私のようなコードを記述する必要はありません。" を

あなたは常に使用できます。

if (Mouse.LeftButton == MouseButtonState.Pressed) 
{ 
    ... 
} 

あなたががこれを含める必要があります。

using System.Windows.Input; 

これは私のためにwpfで動作します。

関連する問題