2012-09-28 113 views
4

XAML/C#Windows 8應用程序...如何在Windows 8 XAML應用程序中拖動元素?

我在XAML/C#中使用了MouseDragElementBehavior在屏幕上拖動一個元素。

不幸的是,交互組件無法正常工作,同時開發應用程序的Windows 8

如何在Windows 8 XAML應用程序拖動的元素?

謝謝。

編輯:我發現了一個樣本例子在這裏:http://code.msdn.microsoft.com/windowsapps/Input-3dff271b/sourcecode?fileId=44758&pathId=962809525

只需將代碼複製,並很能拖我的元素。如果需要幫助,有一些問題會更新。

+0

你想拖動和從一個GridView/ListView的掉落物品或任何其他控制?在第一種情況下實現它的方式更容易。 –

+0

@RenaudDumont它不是listview,它只是一個項目說,頁面上的圖標圖像,用戶可以拖動頁面上的任何地方。然後,我想要的是當用戶擡起手指/鼠標並釋放元素時,它應該動畫並返回到原始位置。 – oms

回答

2

您需要處理要拖動的元素上的操作事件。並且,在元素上將ManipulationMode設置爲非None值。

  1. 手柄ManipulationStarted來初始化拖動代碼
  2. 手柄ManipulationDelta,檢查e.Delta值,並使用RenderTransform偏移您的元件,或者如果在一個Canvas,使用畫布座標。

希望有所幫助。

1

這是一個基於ColinE的答案的過分簡化的例子。

想想看,有一個橢圓形畫布:在後面的代碼

<Canvas Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <Ellipse Fill="Red" 
      Canvas.Left="100" 
      Canvas.Top="100" 
      Width="100" 
      Height="100" 
      ManipulationMode="All" 
      ManipulationDelta="Ellipse_ManipulationDelta_1"/> 
</Canvas> 

現在,您處理在ManipulationDelta:

private void Ellipse_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
    { 
     Ellipse myEllipse = (Ellipse)sender; 
     Canvas.SetLeft(myEllipse, Canvas.GetLeft(myEllipse) + e.Delta.Translation.X); 
     Canvas.SetTop(myEllipse, Canvas.GetTop(myEllipse) + e.Delta.Translation.Y); 
    } 
+0

使用這個更通用的解決方案:http://dotnetbyexample.blogspot.com/2012/04/porting-dragflickbehavior-from-windows.html – oms

相關問題