diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-11-05 15:17:41 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-11-05 15:17:41 +0200 |
| commit | d7650679fedebb42e5fa9d4d482d7ccf657d6ab4 (patch) | |
| tree | c493dbbd56e2e3bf1260a21969e23ddaf787f375 /Software/Visual_Studio/Tango.Touch/Controls | |
| parent | 4c63f73496fc60026da9e363b3e85042733b4423 (diff) | |
| parent | f4f22e7088b672797e3e95f5a5fb5a96651c861e (diff) | |
| download | Tango-d7650679fedebb42e5fa9d4d482d7ccf657d6ab4.tar.gz Tango-d7650679fedebb42e5fa9d4d482d7ccf657d6ab4.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Tango.Touch/Controls')
| -rw-r--r-- | Software/Visual_Studio/Tango.Touch/Controls/TouchClickableControl.cs | 118 |
1 files changed, 118 insertions, 0 deletions
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; + } + + /// <summary> + /// Raises the click event and executes the command. + /// </summary> + protected virtual void OnClick() + { + RoutedEventArgs args = new RoutedEventArgs(TouchClickableControl.ClickEvent, this); + RaiseEvent(args); + if (Command != null && Command.CanExecute(CommandParameter)) + { + Command.Execute(CommandParameter); + } + } + #endregion + } +} |
