执行此操作的简单方法是数据绑定。在 WPF 中,这很容易。您可以将数据从一个控件绑定到另一个控件。下面我将一个接受用户输入的文本框绑定到一个显示它的标签上。
<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;
}
如果你选择第二个选项,我真的建议你看看 Josh Smith 的 MSDN 文章。