2013-05-21 10 views
15

Come posso allegare eventi DragStartedDragDelta a una griglia in windows 8/WinRT. Ho fatto lo stesso con Windows Phone con il metodo GestureService.GetGestureListener(). Ho provato a sostituire il codice con ManipulationStarted & ManipulationDelta eventi in Windows 8. Ma il risultato non è lo stesso. In Windows Phone per un singolo trascinamento entra in DragDelta eventi 2 o più volte. Ma d'altra parte in Windows 8, nell'evento ManupulationDelta, si attiva solo una volta per l'operazione di trascinamento simile.Implementazione degli eventi DragDelta DragStarted in Windows 8/WinRT

+0

Hai impostato 'IsManipulationEnabled = true' sulla tua griglia? –

+0

Non ho trovato nessuna proprietà di questo tipo sulla griglia. Ho impostato la proprietà ManipulationMode = "All" –

+0

Mi dispiace - Mi sono confuso con la griglia WPF - il 'Windows.UI.Xaml.Controls.Grid' ha la manipolazione abilitata da' ManipulationMode' come hai detto tu. –

risposta

10

Sì, penso di sapere cosa vuoi.

Diciamo che avete un po 'XAML come questo:

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

si desidera spostare quel rettangolo intorno al Grid trascinandola.

Proprio di questo codice:

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); 
} 

Per questo:

enter image description here

Speranza io sono vicino! Buona fortuna!

+0

Thx per aver postato questo fantastico codice. Mi ha aiutato molto con il mio incarico! Tuttavia, non capisco come funziona e perché stai oring due modalità di manipolazione (xey) nel costruttore della pagina principale? Puoi spiegare il tuo codice passo dopo passo? Grazie mille! Sto davvero cercando di capire cosa sta succedendo. :) –

+0

Bel pezzo di drag and drop al di fuori del GridView. La parte divertente è che continua a muoversi quando si fa scorrere e rilasciare, almeno quando si è impostato ManipulationMode = "Tutto": D –

Problemi correlati