1
这是怎么了我已经实现了我的WPF应用程序的快捷方式:化CommandBindings快捷键两次执行
public static class Shortcuts
{
static Shortcuts()
{
StartScanningCommand = new RoutedCommand();
StartScanningCommand.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control));
}
public readonly static RoutedCommand StartScanningCommand;
}
在我的XAML视图中我有这样的:
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:Shortcuts.StartScanningCommand}" x:Name="StartScanningCommand" Executed="StartScanningCommand_Executed" CanExecute="StartScanningCommand_CanExecute"/>
</Window.CommandBindings>
而且在XAML的类:
private void StartScanningCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
Scanner.Start();
}
private void StartScanningCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = AppCurrent.GetPermissionManager().CanScan();
if (!e.CanExecute)
{
AppCurrent.Broadcasts.ApplicationStatusBroadcast.NotifySubscribers(this, new ApplicationStatusEventArgs("You dont have permission to scan", StatusType.Error));
}
}
但由于某种原因StartScanningCommand_CanExecute
执行两次。如果我在方法内部放置了一个MessageBox.Show
,则会显示对话框两次。
任何原因为什么发生这种情况?
afaik,只要您将CanExecuteRoutedEventArgs#CanExecute属性设置为true或false,就可以执行CanExecuted中的任何逻辑。我知道我可能没有正确使用它(在设计方面),但这并不能证明为什么执行两次。 – Misters
请参阅编辑。有几个原因我能找到,但看起来你必须试验才能确定。 – David
PreviewCanExecute是答案,谢谢! – Misters