Here is an example of using a simple behavior and set of triggers that allow you to do that.
<TextBlock Text="{Binding Welcome}"> <i:Interaction.Behaviors> <li:GestureBehavior/> </i:Interaction.Behaviors> <i:Interaction.Triggers> <li:DoubleTapTrigger> <cmd:EventToCommand Command="{Binding DoubleTapCommand}" PassEventArgsToCommand="True"/> </li:DoubleTapTrigger> </i:Interaction.Triggers> </TextBlock>The TextBlock above is bound to a ViewModel that of course has a DoupleTapCommand. In this case a RelayCommand from MVVM Light:
public MainViewModel() { DoubleTapCommand = new RelayCommand<GestureEventArgs>(e => { MessageBox.Show("double tap " + e.OriginalSource.ToString()); }); DragStartedCommand = new RelayCommand<DragStartedGestureEventArgs>(Drag); DragDeltaCommand = new RelayCommand<DragDeltaGestureEventArgs>(Drag); DragCompletedCommand = new RelayCommand<DragCompletedGestureEventArgs>(Drag); } public RelayCommand<GestureEventArgs> DoubleTapCommand { get; private set; }
And we can implement a quick and dirty drag and drop:
Point _start; private void Drag(DragStartedGestureEventArgs e) { UIElement ui = e.OriginalSource as UIElement; if (ui != null) { if (!(ui.RenderTransform is TranslateTransform)) ui.RenderTransform = new TranslateTransform(); TranslateTransform t = ui.RenderTransform as TranslateTransform; _start = new Point(); _start.X = t.X; _start.Y = t.Y; e.Handled = true; } } private void Drag(DragDeltaGestureEventArgs e) { UIElement ui = e.OriginalSource as UIElement; if (ui != null) { TranslateTransform t = ui.RenderTransform as TranslateTransform; t.X += e.HorizontalChange; t.Y += e.VerticalChange; e.Handled = true; } } private void Drag(DragCompletedGestureEventArgs e) { UIElement ui = e.OriginalSource as UIElement; if (ui != null && _start != null) { if (MessageBox.Show("Press cancel to abort this move.", "Really?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { TranslateTransform t = ui.RenderTransform as TranslateTransform; t.X = _start.X; t.Y = _start.Y; e.Handled = true; } } } public RelayCommand<DragStartedGestureEventArgs> DragStartedCommand { get; private set; } public RelayCommand<DragDeltaGestureEventArgs> DragDeltaCommand { get; private set; } public RelayCommand<DragCompletedGestureEventArgs> DragCompletedCommand { get; private set; }Code and example is available here.
CodeProject
No comments:
Post a Comment