2016-11-08 108 views
0

我正在嘗試創建允許在畫布內移動項目的應用程序。在UWP中移動項目

這裏是XAML:

<Canvas Background="#4CAF50"> 
    <Grid Background="#3F51B5" 
     Width="50" 
     Height="50" 
     CanDrag="True" 
     ManipulationMode="All" 
     ManipulationDelta="UIElement_OnManipulationDelta"> 
    </Grid> 
</Canvas> 

C#:

private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    var myEllipse = (Grid)sender; 

    Canvas.SetLeft(myEllipse, Canvas.GetLeft(myEllipse) + e.Delta.Translation.X); 
    Canvas.SetTop(myEllipse, Canvas.GetTop(myEllipse) + e.Delta.Translation.Y); 
} 

Everyting工作正常,當我慢慢移動網格。當我將它移動得太快時,鼠標光標將移出網格並停止移動。有沒有辦法讓光標停留在網格中間或任何能夠幫助我更快地完成操作的方法?

+1

是否有一個需求意味着它需要在Canvas內完成?我工作的項目中有一個控件/組件叫做Winux,它叫做DraggableContentControl,它可能會讓你感興趣(https://github.com/jamesmcroft/WinUX-UWP-Toolkit/blob/develop/WinUX/WinUX.UWP.Xaml。 Controls/DraggableContentControl/DraggableContentControl.cs) 它使用CompositeTransform來執行翻譯操作,這可能是您可以查看的替代方法 –

回答

0

當我移動它太快時,鼠標光標用盡了網格並且移動停止了。

這是因爲您已啓用GridCanDrag屬性,該屬性確定元素是否可以拖動在一拖和拖放操作的數據。你在這裏設計了一個轉換 - 拖動操作,它們是兩個不同的操作系統,它們在這裏發生衝突。

因此,一個非常簡單的方法來解決您的問題是刪除GridCanDrag="True"。此外,我在這裏建議您也處理ManipulationStartedManipulationCompleted事件Grid以防其他可能發生的問題。

最後如果您對拖放操作感興趣,可以參考官方Drag and drop sample