Простой способ сделать это будет привязка данных. В WPF это довольно просто. Вы можете привязать данные от одного элемента управления к другому. Ниже я привязал TextBox, который взял пользовательский ввод, к ярлыку, который отображает его.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="45,55,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<Label Content="{Binding ElementName=textBox1, Path=Text}" Height="28" HorizontalAlignment="Left" Margin="45,135,0,0" Name="label1" VerticalAlignment="Top" Width="142" />
</Grid>
Более сложный ответ будет делать команды связывания. То, что это делает, - это улавливать определенные привязки клавиш в UserControl или Window и выполняет заданную команду. Это немного сложнее, потому что для этого требуется создать класс, который реализует ICommand.
Больше информации здесь: http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.aspx
лично я большой поклонник реализации RelayCommand Джош Смит. Существует замечательная статья here.
Короче, хотя вы можете это сделать.
XAML:
<Window.InputBindings>
<KeyBinding Key="Escape" Command="{Binding KeyPressCommand}"/>
</Window.InputBindings>
КОД: Вам нужно будет создать RelayCommand класса.
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
И затем, чтобы реализовать это в своем главном окне, вам нужно будет это сделать.
private RelayCommand _keyPressCommand;
public RelayCommand KeyPressCommand
{
get
{
if (_keyPressCommand== null)
{
_keyPressCommand = new RelayCommand(
KeyPressExecute,
CanKeyPress);
}
return _keyPressCommand;
}
}
private void KeyPressExecute(object p)
{
// HANDLE YOUR KEYPRESS HERE
}
private bool CanSaveZone(object parameter)
{
return true;
}
Если вы идете со вторым вариантом, я действительно предлагаю вам взглянуть на статью MSDN Джоша Смита.
Я знаю, как захватить ключевое событие, это не моя проблема. Моя проблема заключается в создании контрольной работы, где она будет реагировать только на одно ключевое событие (не многократно) и отображать, что это за ключевое событие. – Joseph
Какой элемент управления вы хотите работать и какое событие вы хотите отслеживать? – las
Я думаю, что KeyDown - лучший способ вашей проблемы, см. Эту ссылку MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx – las