Created
August 23, 2012 05:59
-
-
Save pregress/3433214 to your computer and use it in GitHub Desktop.
Right Tapped Command
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public sealed class RightTapped | |
{ | |
#region Properties | |
#region Command | |
/// | |
/// GetCommand | |
/// | |
/// | |
/// | |
public static ICommand GetCommand(DependencyObject obj) | |
{ | |
return (ICommand)obj.GetValue(CommandProperty); | |
} | |
/// | |
/// SetCommand | |
/// | |
/// | |
/// | |
public static void SetCommand(DependencyObject obj, ICommand value) | |
{ | |
obj.SetValue(CommandProperty, value); | |
} | |
/// | |
/// DependencyProperty CommandProperty | |
/// | |
public static readonly DependencyProperty CommandProperty = | |
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(RightTapped), new PropertyMetadata(null, OnCommandChanged)); | |
#endregion Command | |
#region CommandParameter | |
/// | |
/// GetCommandParameter | |
/// | |
/// | |
/// | |
public static object GetCommandParameter(DependencyObject obj) | |
{ | |
return (object)obj.GetValue(CommandParameterProperty); | |
} | |
/// | |
/// SetCommandParameter | |
/// | |
/// | |
/// | |
public static void SetCommandParameter(DependencyObject obj, object value) | |
{ | |
obj.SetValue(CommandParameterProperty, value); | |
} | |
/// | |
/// DependencyProperty CommandParameterProperty | |
/// | |
public static readonly DependencyProperty CommandParameterProperty = | |
DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(RightTapped), new PropertyMetadata(null, OnCommandParameterChanged)); | |
#endregion CommandParameter | |
#region HasCommandParameter | |
private static bool GetHasCommandParameter(DependencyObject obj) | |
{ | |
return (bool)obj.GetValue(HasCommandParameterProperty); | |
} | |
private static void SetHasCommandParameter(DependencyObject obj, bool value) | |
{ | |
obj.SetValue(HasCommandParameterProperty, value); | |
} | |
private static readonly DependencyProperty HasCommandParameterProperty = | |
DependencyProperty.RegisterAttached("HasCommandParameter", typeof(bool), typeof(RightTapped), new PropertyMetadata(false)); | |
#endregion HasCommandParameter | |
#endregion Propreties | |
#region Event Handling | |
private static void OnCommandParameterChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) | |
{ | |
SetHasCommandParameter(o, true); | |
} | |
private static void OnCommandChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) | |
{ | |
var element = o as FrameworkElement; | |
if (element != null) | |
{ | |
if (e.NewValue == null) | |
{ | |
element.RightTapped -= FrameworkElementKeyUp; | |
} | |
else if (e.OldValue == null) | |
{ | |
element.RightTapped += FrameworkElementKeyUp; | |
} | |
} | |
} | |
private static void FrameworkElementKeyUp(object sender, RightTappedRoutedEventArgs e) | |
{ | |
var o = sender as DependencyObject; | |
var command = GetCommand(sender as DependencyObject); | |
var element = e.OriginalSource as FrameworkElement; | |
if (element != null) | |
{ | |
// If the command argument has been explicitly set (even to NULL) | |
if (GetHasCommandParameter(o)) | |
{ | |
var commandParameter = GetCommandParameter(o); | |
// Execute the command | |
if (command.CanExecute(commandParameter)) | |
{ | |
command.Execute(commandParameter); | |
} | |
} | |
else if (command.CanExecute(element.DataContext)) | |
{ | |
command.Execute(element.DataContext); | |
} | |
} | |
} | |
#endregion | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment