2013-05-21 18 views
15

windows 8/WinRT ürünündeki bir kılavuza DragStartedDragDelta olaylarını nasıl ekleyebilirim? Aynı şeyi Windows'ta GestureService.GetGestureListener() yöntemiyle yaptım. Windows 8'de ManipulationStarted & ManipulationDelta olayları ile kodunu değiştirmeyi denedim. Ancak sonuç aynı değil. Windows telefonunda tek bir sürükleme için DragDelta olaylarına 2 veya daha fazla kez girer. Fakat diğer taraftan Windows 8'deki ManupulationDelta etkinliğinde, benzer Sürükle işlemi için sadece bir kez ateşlenir.Windows 8/WinRT Sürüklenen DragDelta olaylarının uygulanması

+0

Kılavuzunuzda 'IsManipulationEnabled = true' ayarladınız mı? –

+0

Izgara için böyle bir özellik bulamadım. ManipulationMode özelliğini ayarladım = "Tümü" –

+0

Üzgünüm - WPF ızgarası ile karıştırıldım - '' Windows.UI.Xaml.Controls.Grid' '' ManipulationMode' tarafından ayarlanan manipülasyon var dediğiniz gibi. –

cevap

10

Evet, sanırım ne istediğini biliyorum.

<Grid Margin="50"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Rectangle Fill="Blue" x:Name="MyRect" /> 
</Grid> 

Sen sürükleyerek Grid etrafında bu dikdörtgeni taşımak istiyorum:

Diyelim ki böyle bir XAML var diyelim. Bunun için

public MainPage() 
{ 
    this.InitializeComponent(); 
    MyRect.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY; 
    MyRect.ManipulationDelta += Rectangle_ManipulationDelta; 
    MyRect.ManipulationCompleted += Rectangle_ManipulationCompleted; 
} 

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

private void Rectangle_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
{ 
    var _Rectangle = sender as Windows.UI.Xaml.Shapes.Rectangle; 
    _Rectangle.RenderTransform = null; 

    var _Column = System.Convert.ToInt16(_Rectangle.GetValue(Grid.ColumnProperty)); 
    if (_Column <= 0 && e.Cumulative.Translation.X > _Rectangle.RenderSize.Width * .5) 
     _Rectangle.SetValue(Grid.ColumnProperty, 1); 
    else if (_Column == 1 && e.Cumulative.Translation.X < _Rectangle.RenderSize.Width * -.5) 
     _Rectangle.SetValue(Grid.ColumnProperty, 0); 

    var _Row = System.Convert.ToInt16(_Rectangle.GetValue(Grid.RowProperty)); 
    if (_Row <= 0 && e.Cumulative.Translation.Y > _Rectangle.RenderSize.Height * .5) 
     _Rectangle.SetValue(Grid.RowProperty, 1); 
    else if (_Row == 1 && e.Cumulative.Translation.Y < _Rectangle.RenderSize.Height * -.5) 
     _Rectangle.SetValue(Grid.RowProperty, 0); 
} 

:

enter image description here

Umut ben yakınım

Sadece bu kodu kullanın! Şansın en iyisi!

+0

Thx. Görevimle çok yardımcı oldu! Ancak, bunun nasıl çalıştığını tam olarak anlayamıyorum ve neden ana sayfa yapıcısında iki manipülasyon modu (x ve y) yapıyorsunuz? Kodunuzu adım adım açıklayabilir misiniz? Çok teşekkür ederim! Gerçekten neler olduğunu anlamaya çalışıyorum. :) –

+0

Güzel parça sürükle ve GridView dışında bırakın. Eğlenceli bölüm, en azından, ManipulationMode = "Tümü" ayarını yaptığınızda, kaydırma ve bırakma sırasında hareket etmeye devam etmesidir: D –