2013-07-22 75 views
4

我在WinRT中編寫了一個UserControl,我想用手指使它移動。
當我用筆或鼠標移動它時,它仍在移動,但不是當我使用手指時。
當我使用手指時,PointerMoved不是triggert。如何在WinRT中創建水龍頭可移動控件?

下面是簡單的XAML:

<UserControl> 
    <Rectangle PointerPressed="PointerPressed" PointerMoved="PointerMoved"/> 
</UserControl> 

這裏是代碼:

private Point position; 

void PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{ 
    Rectangle r = sender as Rectangle; 
    var pointerPoint = e.GetCurrentPoint(r); 
    position = pointerPoint.Position; 
} 

void PointerMoved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{  
    Rectangle r = sender as Rectangle; 
    var delta = e.GetCurrentPoint(r).Position; 
    r.Margin = new Thickness(r.Margin.Left + delta.X - position.X, r.Margin.Top + delta.Y - position.Y, 0, 0); 
} 

我怎麼會錯過嗎?

編輯:
我與Windows 8.1和VisualStudio的工作2013年
也許這是一個新的功能^^

回答

8

這比您想象的要簡單!

<Rectangle Width="100" Height="100" Fill="White" 
    ManipulationMode="TranslateX,TranslateY" 
    ManipulationDelta="Rectangle_ManipulationDelta_1" /> 

private void Rectangle_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    var _Rectangle = sender as Windows.UI.Xaml.Shapes.Rectangle; 
    var _Transform = (_Rectangle.RenderTransform as CompositeTransform) 
     ?? (_Rectangle.RenderTransform = new CompositeTransform()) as CompositeTransform; 
    _Transform.TranslateX += e.Delta.Translation.X; 
    _Transform.TranslateY += e.Delta.Translation.Y; 
} 

祝你好運!

+0

就是這樣。 非常感謝。 –

+0

這是簡單的和sooperm thnku傑里尼克鬆 – FebinDonz

+0

這是80年代的超級棒我想? Sooperm。呵呵。 –

0

一,不相信你可以通過筆或鼠標,因爲PointerMoved事件來移動你應該檢查e.Pointer.IsInContact布爾值以確保在移動時選擇對象。它使你的移動動作看起來更好。

二,對不起,我不知道爲什麼在你的機器上使用手指時沒有觸發PointerMoved。無論如何,如果您將處理函數的名稱設置爲與事件名稱不同,它會更好。

如果你可以分享更多的信息,我們可以討論。

+0

感謝您的回覆。 這只是一個僞代碼。 在實際中,我也檢查pointerId和buttonPressed狀態等。 事件名稱也有點不同... 我得到的唯一問題是,當我使用手指時,PointerMoved未在我的Surface Pro上觸發。 也許事件被隱藏手勢識別或類似的東西? –