Добавить свойство зависимости в UserControl: -
public ICommand EnterKeyCommand
{
get { return GetValue(EnterKeyCommandProperty) as ICommand; }
set { SetValue(EnterKeyCommandProperty, value); }
}
public static readonly DependencyProperty EnterKeyCommandProperty =
DependencyProperty.Register(
"EnterKeyCommand",
typeof(ICommand),
typeof(MyControl),
null);
Присоедините обработчик для события Keyup в UserControl, используя метод AddHandler
: -
void MyControl()
{
InitializeComponent();
this.AddHandler(UIElement.KeyUpEvent, new KeyEventHandler(UserControl_KeyUp), true); //Note that last parameter important
}
void UserControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter && EnterKeyCommand != null && EnterKeyCommand.CanExecute(null))
{
EnterKeyCommand.Execute(null);
}
}
Обратите внимание, что смысл в том, что использование AddHandler
позволяет вам перехватить событие, которое уже было обработано.
Также обратите внимание, что это упрощено для ясности. В действительности вы также хотели бы реализовать другое свойство зависимости для параметра Command и передать его в CanExecute
и Execute
вместо null. Вам также необходимо определить, является ли OriginalSource
TextBox
, для которого AcceptsReturn
имеет значение true.