8

MouseLeftButtonDownイベントではなくContactDownイベントを発生させるMicrosoftSurfaceSDKを使用しているため、プログラムでWPFコントロールに対してMouseLeftButtonDownイベントを手動で発生させようとしています。基本的に、ContactDownイベントを処理しながら、MouseLeftButtonDownイベントをコントロールにプッシュして、コントロールの正しい動作を開始しようとしています。

MouseButtonEventArgsでこれを行うには、コントロールでRaiseEventメソッドを使用する必要があると思いますが、パラメーターを理解するのに問題があります。

よろしくお願いします!

4

4 に答える 4

6

Win32相互運用機能を使用して、マウスイベントとキーイベントをスプーフィングできます。MSDN / pinvoke.netでSendInput関数を調べてください。

これにより、システムおよび他のアプリケーションは、マウスが実際にクリックされたと見なすことに注意してください。WPFイベントを開始するだけの場合は、を試してくださいRaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) )

于 2010-06-13T21:58:20.017 に答える
5

コントロールで特定のイベントをトリガーしたいという要望は、多くの場合、コードの設計上の問題を示しています。イベントハンドラーは、動作を実行するのではなく、動作をトリガーする必要があります。MouseLeftButtonDownイベントハンドラーによってトリガーされるアクションを実行するコードを別のメソッドに移動することをお勧めします。ContactDown次に、同じメソッドをイベントハンドラーから呼び出すことができます。

于 2010-06-13T20:49:21.483 に答える
4
var grid = new Grid();            

int timestamp = new TimeSpan(DateTime.Now.Ticks).Milliseconds;
const MouseButton mouseButton = MouseButton.Left;
var mouseDownEvent =
   new MouseButtonEventArgs(Mouse.PrimaryDevice, timestamp, mouseButton) {
       RoutedEvent = UIElement.MouseLeftButtonDownEvent,
       Source = grid,
   };

これが、テストコードでイベントを発生させる方法です。

于 2011-12-15T15:00:22.137 に答える
1

これは、任意ののクリックイベントを発生させるために使用する静的な方法ですUIElement

using System;
using System.Windows;
using System.Windows.Input;

    
public static void RaiseMouseClickEvent(UIElement elementToClick, MouseButton buttonToUse)
{
    elementToClick.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, buttonToUse) { RoutedEvent = Button.ClickEvent });
}
于 2020-11-27T08:02:50.890 に答える