2011-09-25 83 views
3

我有一些直接WPF 3.5控件處理左鍵單擊,我需要在Surface應用程序(SDK 1.0)中使用。我面臨的問題是,默認情況下不起作用。我正在考慮將每個控件包裝在SurfaceContentControl中,並將ContactTouchDownContactTapGesture事件翻譯成相應的MouseDown事件。注入/模擬WPF路由鼠標點擊事件

問題歸結爲 - 如何「注入」或模擬任意路由鼠標事件?我試過InputManager.Current.ProcessInput(),但沒有太多。任何幫助表示讚賞。

回答

1

嘗試使用AutomationPeer類。例如ButtonAutomationPeer用於Button。以下代碼啓動點擊。

ButtonAutomationPeer peer = new ButtonAutomationPeer(button); 
IInvokeProvider provider = (IInvokeProvider)peer.GetPattern(PatternInterface.Invoke); 
provider.Invoke(); 
+0

謝謝。如果我想點擊一個'Path'或者任何非''Button'?怎麼辦?如果我不想特別點擊任何內容,但只想在(X,Y)處發送點擊並查看誰獲得了它,該怎麼辦?如果你知道目標實際上是一個'Button',你的解決方案就很好。 – wpfwannabe

1

evpo的想法很有意思(儘管如果您使用自定義控件,他們很少會使用AutomationPeer類)。

您不能簡單地通過嚮應用程序發送WM_MOUSE *事件來「注入」鼠標輸入... WPF確實會處理消息,但是當它確定該事件的鼠標位置時,它將查詢實際鼠標API,而不是嘗試你在WM中粘貼的東西。

所以你所能做的只是告訴窗口移動實際的鼠標光標,並像點擊/釋放按鈕一樣操作。一些代碼,你可以使用這是在http://www.codeproject.com/KB/system/globalmousekeyboardlib.aspx

也就是說,雖然技術上可以做到這一點,它吮吸......你有一個昂貴的多點觸控設備,但1)顯示在其2鼠標光標)限制它的任意部分被用來'單點觸摸'(並且這些任意部分中只有一個是一次和3個),想出一個任意的方法來確定你將哪個手指當作鼠標控制的手指