| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 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;namespace WpfStyleableWindow.StyleableWindow{    public static class ControlDoubleClickBehavior    {        public static ICommand GetExecuteCommand(DependencyObject obj)        {            return (ICommand)obj.GetValue(ExecuteCommand);        }        public static void SetExecuteCommand(DependencyObject obj, ICommand command)        {            obj.SetValue(ExecuteCommand, command);        }        public static readonly DependencyProperty ExecuteCommand = DependencyProperty.RegisterAttached("ExecuteCommand",                      typeof(ICommand), typeof(ControlDoubleClickBehavior),            new UIPropertyMetadata(null, OnExecuteCommandChanged));        public static Window GetExecuteCommandParameter(DependencyObject obj)        {            return (Window) obj.GetValue(ExecuteCommandParameter);        }        public static void SetExecuteCommandParameter(DependencyObject obj, ICommand command)        {            obj.SetValue(ExecuteCommandParameter, command);        }        public static readonly DependencyProperty ExecuteCommandParameter = DependencyProperty.RegisterAttached("ExecuteCommandParameter",            typeof(Window), typeof(ControlDoubleClickBehavior));        private static void OnExecuteCommandChanged(object sender, DependencyPropertyChangedEventArgs e)        {            var control = sender as Control;            if (control != null)            {                control.MouseDoubleClick += control_MouseDoubleClick;            }        }        static void control_MouseDoubleClick(object sender, MouseButtonEventArgs e)        {            var control = sender as Control;                        if(control != null)            {                var command = control.GetValue(ExecuteCommand) as ICommand;                var commandParameter = control.GetValue(ExecuteCommandParameter);                if (command.CanExecute(e))                {                    command.Execute(commandParameter);                }            }        }           }}
 |