From 9561a5b3d930d5a52e70f97d5fe9d63d4bb1e067 Mon Sep 17 00:00:00 2001 From: Victoria Plitt Date: Tue, 5 Nov 2019 15:15:04 +0200 Subject: Implemented TouchClickableControl for PPC notifications. --- .../Tango.Touch/Controls/TouchClickableControl.cs | 118 +++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Software/Visual_Studio/Tango.Touch/Controls/TouchClickableControl.cs (limited to 'Software/Visual_Studio/Tango.Touch/Controls') diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchClickableControl.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchClickableControl.cs new file mode 100644 index 000000000..92e60f7bc --- /dev/null +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchClickableControl.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; + +namespace Tango.Touch.Controls +{ + public class TouchClickableControl : Grid + { + private bool _isMouseDown; + + #region Properties + + public object CommandParameter + { + get { return (object)GetValue(CommandParameterProperty); } + set { SetValue(CommandParameterProperty, value); } + } + public static readonly DependencyProperty CommandParameterProperty = + DependencyProperty.Register("CommandParameter", typeof(object), typeof(TouchClickableControl), new PropertyMetadata(null)); + + #endregion + + #region Routed Events + + public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TouchClickableControl)); + public event RoutedEventHandler Click + { + add + { + AddHandler(ClickEvent, value); + } + remove + { + RemoveHandler(ClickEvent, value); + } + } + + #endregion + + #region Commands + + public ICommand Command + { + get { return (ICommand)GetValue(CommandProperty); } + set { SetValue(CommandProperty, value); } + } + public static readonly DependencyProperty CommandProperty = + DependencyProperty.Register("Command", typeof(ICommand), typeof(TouchClickableControl), new PropertyMetadata(null, (d, e) => (d as TouchClickableControl).OnCommandChanged())); + + #endregion + + #region Constructors + + public TouchClickableControl() + { + Background = Brushes.Transparent; + } + + #endregion + + #region Private Methods + + private void OnCommandChanged() + { + if (Command != null) + { + Command.CanExecuteChanged -= Command_CanExecuteChanged; + Command.CanExecuteChanged += Command_CanExecuteChanged; + } + } + + private void Command_CanExecuteChanged(object sender, EventArgs e) + { + IsEnabled = Command != null && Command.CanExecute(CommandParameter); + } + + #endregion + + #region Override Methods + + protected override void OnMouseDown(MouseButtonEventArgs e) + { + base.OnMouseDown(e); + _isMouseDown = true; + } + + protected override void OnMouseUp(MouseButtonEventArgs e) + { + base.OnMouseUp(e); + if (_isMouseDown) + { + OnClick(); + } + + _isMouseDown = false; + } + + /// + /// Raises the click event and executes the command. + /// + protected virtual void OnClick() + { + RoutedEventArgs args = new RoutedEventArgs(TouchClickableControl.ClickEvent, this); + RaiseEvent(args); + if (Command != null && Command.CanExecute(CommandParameter)) + { + Command.Execute(CommandParameter); + } + } + #endregion + } +} -- cgit v1.3.1