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