データバインディングになり、これを行うための簡単な方法を提供します。 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>
CODE: あなたは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番目のオプションで行くなら、私は本当にあなたがジョシュ・スミスMSDNの記事を見てみましょうお勧めします。
私はキーイベントをキャプチャする方法を知っていますが、それは私の問題ではありません。私の問題は、単一のキーイベント(マルチプルではない)にしか反応せず、そのキーイベントが何であったかを表示するコントロールワークを作成することです。 – Joseph
あなたが働きたいコントロールと、あなたが追跡したいイベントは何ですか? – las
KeyDownはあなたの問題を解決する最善の方法だと思います。このMSDNのリンクを参照してください。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx – las