Artículo
|
Evento Double Tap Windows Phone 7 |
Recordamos que el Double-Tap son dos gestos Tap en un periodo de tiempo muy corto, no existe este evento en ningún objeto con lo que aprovecharemos el behaivor anterior para extenderlo para detectar estos dos Tap, incluiremos una propiedad donde indicaremos el tiempo que queremos que pase entre gesto y gesto, a este behaivor le llamaremos DoubleTapAction, os dejo el código a continuación.
En el código anterior podéis ver que se ha definido la propiedad DoubleTapTimeoutInMilliseconds que nos indicará el tiempo entre gestos Tap y se ha definido por defecto que sea de 1 segundo.
El XAML del nuevo Border sería
Autor del artículo: Oskar Álvarez

public class DoubleTapAction : TapAction{
public event EventHandler DoubleTap;
public int DoubleTapTimeoutInMilliseconds {
get { return (int)GetValue(DoubleTapTimeoutInMillisecondsProperty); }
set { SetValue(DoubleTapTimeoutInMillisecondsProperty, value); }
}
public static readonly DependencyProperty DoubleTapTimeoutInMillisecondsProperty = DependencyProperty.Register("DoubleTapTimeoutInMilliseconds", typeof(int),
typeof(DoubleTapAction), new PropertyMetadata(1000));
protected DateTime? FirstTap { get; set; }
protected override void OnTap(){
base.OnTap();
if (FirstTap.HasValue && FirstTap.Value.AddMilliseconds(DoubleTapTimeoutInMilliseconds) > DateTime.Now){
OnDoubleTap();
FirstTap = null;
}else{
FirstTap = DateTime.Now;
}
}
protected virtual void OnDoubleTap(){
if (DoubleTap != null){
DoubleTap(this.AssociatedObject, EventArgs.Empty);
}
}
}
En el código anterior podéis ver que se ha definido la propiedad DoubleTapTimeoutInMilliseconds que nos indicará el tiempo entre gestos Tap y se ha definido por defecto que sea de 1 segundo.
public class TapAction : Behavior{
public event EventHandler Tap;
protected bool MouseDown { get; set; }
protected override void OnAttached(){
base.OnAttached();
this.AssociatedObject.MouseLeftButtonDown += AO_MouseLeftButtonDown;
this.AssociatedObject.MouseLeftButtonUp += AO_MouseLeftButtonUp;
}
protected override void OnDetaching(){
this.AssociatedObject.MouseLeftButtonDown -= AO_MouseLeftButtonDown;
this.AssociatedObject.MouseLeftButtonUp -= AO_MouseLeftButtonUp;
base.OnDetaching();
}
void AO_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){
if (MouseDown){
OnTap();
}
MouseDown = false;
}
void AO_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){
MouseDown = true;
}
protected virtual void OnTap(){
if (Tap != null){
Tap(this.AssociatedObject, EventArgs.Empty);
}
}
}
El XAML del nuevo Border sería
<Border BorderBrush="#FFF11717" BorderThickness="2" Margin="0,118,21,0" Background="#FFCC8787" HorizontalAlignment="Right" Width="160" Height="90" VerticalAlignment="Top">
<i:Interaction.Behaviors>
<local:DoubleTapAction DoubleTap="DoubleTapGesture_DoubleTap"/>
</i:Interaction.Behaviors>
</Border>
<Border BorderBrush="#FFF11717" BorderThickness="2" Margin="0,118,21,0" Background="#FFCC8787" HorizontalAlignment="Right" Width="160" Height="90" VerticalAlignment="Top">
<i:Interaction.Behaviors>
<local:DoubleTapAction DoubleTap="DoubleTapGesture_DoubleTap"/>
</i:Interaction.Behaviors>
</Border>
private void DoubleTapGesture_DoubleTap(object sender, EventArgs e){
MessageBox.Show("Has hecho Doucble-Tap en el Border!");
}
Autor del artículo: Oskar Álvarez
![]() |
Publicado por: Angel Carrero |
|
|
Comentarios
Últimas noticias
· factura
Últimos artículos














































