Это относится к ответу Эдди.
Я немного поиграл с ним, и это здорово, я также создал небольшой шаблон для создания новых команд. Я использую его с Sharpdevelop в качестве фрагмента кода. Просто вставьте следующее в свой код (например, через фрагмент):
#region $nameCommand
public static readonly DependencyProperty $nameCommand =
EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.$nameEvent, "$nameCommand", typeof (ControlBehavior));
public static void Set$nameCommand(DependencyObject o, ICommand value)
{
o.SetValue($nameCommand, value);
}
public static ICommand Get$nameCommand(DependencyObject o)
{
return o.GetValue($nameCommand) as ICommand;
}
#endregion
Затем выполните поиск, замените «$ name» именем события/команды, например. МышьEnter
Обратите внимание, важно убедиться, что вы выбрали правильное имя класса для владельца (в моем случае ControlBehavior.
Я прикрепляю класс, который я создал для общих команд мыши, в надежде, что другие люди тоже им поделятся, и мы не просто реализуем одно и то же снова и снова, где мы могли бы сэкономить много времени, поделившись. Вот мой полный класс ControlBehavior (до сих пор я реализовал только те события, которые мне были нужны):
public static class ControlBehavior
{
#region MouseEnterCommand
public static readonly DependencyProperty MouseEnterCommand =
EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.MouseEnterEvent, "MouseEnterCommand", typeof (ControlBehavior));
public static void SetMouseEnterCommand(DependencyObject o, ICommand value)
{
o.SetValue(MouseEnterCommand, value);
}
public static ICommand GetMouseEnterCommand(DependencyObject o)
{
return o.GetValue(MouseEnterCommand) as ICommand;
}
#endregion
#region MouseLeaveCommand
public static readonly DependencyProperty MouseLeaveCommand =
EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.MouseLeaveEvent, "MouseLeaveCommand", typeof (ControlBehavior));
public static void SetMouseLeaveCommand(DependencyObject o, ICommand value)
{
o.SetValue(MouseLeaveCommand, value);
}
public static ICommand GetMouseLeaveCommand(DependencyObject o)
{
return o.GetValue(MouseLeaveCommand) as ICommand;
}
#endregion
#region MouseDoubleClickCommand
public static readonly DependencyProperty MouseDoubleClickCommand =
EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.MouseDoubleClickEvent, "MouseDoubleClickCommand", typeof (ControlBehavior));
public static void SetMouseDoubleClickCommand(Control o, ICommand command)
{
o.SetValue(MouseDoubleClickCommand, command);
}
public static void GetMouseDoubleClickCommand(Control o)
{
o.GetValue(MouseDoubleClickCommand);
}
#endregion
#region MouseLeftButtonDownCommand
public static readonly DependencyProperty MouseLeftButtonDownCommand =
EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.MouseLeftButtonDownEvent, "MouseLeftButtonDownCommand", typeof (ControlBehavior));
public static void SetMouseLeftButtonDownCommand(DependencyObject o, ICommand value)
{
o.SetValue(MouseLeftButtonDownCommand, value);
}
public static ICommand GetMouseLeftButtonDownCommand(DependencyObject o)
{
return o.GetValue(MouseLeftButtonDownCommand) as ICommand;
}
#endregion
}
Используя приведенный выше шаблон, мне потребовалось всего несколько секунд для каждой команды.
person
Thorsten Lorenz
schedule
26.07.2009