2016-07-14 78 views
0

我有一個面板包含兩種類型(使用鼠標)元素鼠標區域TouchArea,當用戶移動光標,或點擊在TouchArea我不」的噸要在面板上觸發任何鼠標事件(如MouseEnterMouseLeaveMouseMove不同HitArea基於設備

我做它現在在TouchArea問題重寫HitTestCore的方式是,我不知道任何其他方式找到如果用戶正在使用鼠標或手寫筆,除非通過查看Environment.StackTrace,這接近了一個非常糟糕的主意。

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) 
{ 
    if (Environment.StackTrace.Contains("Stylus")) 
    { 
     return base.HitTestCore(hitTestParameters); 
    } 
    return null; 
} 

所以主要的問題是我怎麼可以告訴客戶端在使用FrameworkElement或者如果這樣的事情是不可能有另一種方式來忽略基於所使用的輸入設備上的事件。

+0

如何這兩方面看事件只更新?我現在無法想象... – lokusking

+0

@lokusking它們只是兩個矩形,它們看起來並不重要,我只是想將它們用作面板的熱點,或者可能是其他容器(如按鈕)的熱點。 – trebor

+0

一個可能的解決方案可能是將這個大面板分成兩個小面板。一個用於鼠標,一個用於Touch。然後覆蓋觸摸面板/區域中的鼠標事件 – lokusking

回答

0

顯然,你可以從System.Windows.Input.InputManager我所做的上次使用的輸入設備是:

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) 
{ 
    if (InputManager.Current.MostRecentInputDevice is StylusDevice) 
    { 
     return base.HitTestCore(hitTestParameters); 
    } 
    return null; 
} 

現在如果使用觸摸設備的控制纔會被激活。

注意InputManager.Current.MostRecentInputDevicenull默認情況下,它接縫像MouseDownTouchDown而不是MouseEnterMouseMove