これを行う簡単な方法は、データバインディングです。WPF では、これは非常に簡単です。あるコントロールから別のコントロールにデータをバインドできます。以下では、ユーザー入力を受け取った TextBox をそれを表示する Label にバインドしています。
<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
個人的には、Josh Smith による RelayCommand 実装の大ファンです。ここに素晴らしい記事があります。
要するに、あなたはこれを行うことができます。
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;
}
2 番目のオプションを選択する場合は、Josh Smith による MSDN の記事を参照することを強くお勧めします。