我可以建议改进的是通过绑定到静态命令实例来消除对事件处理程序的需求。
注意:这仅适用于 .NET 4 及更高版本,因为它需要绑定到KeyBinding
属性的能力。
首先,创建一个以 Window 作为参数并Close
在Execute
方法内调用的命令:
public class CloseThisWindowCommand : ICommand
{
#region ICommand Members
public bool CanExecute(object parameter)
{
//we can only close Windows
return (parameter is Window);
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (this.CanExecute(parameter))
{
((Window)parameter).Close();
}
}
#endregion
private CloseThisWindowCommand()
{
}
public static readonly ICommand Instance = new CloseThisWindowCommand();
}
然后你可以将你的绑定KeyBinding
到静态Instance
属性:
<Window.InputBindings>
<KeyBinding Key="Escape" Command="{x:Static local:CloseThisWindowCommand.Instance}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" />
</Window.InputBindings>
我不知道这一定比您的方法更好,但这确实意味着每个顶部的样板要少一些,Window
并且您不需要在每个中包含事件处理程序