2

我有一个带有默认工具栏按钮的 reportViewer,用于减少绑定到命令的缩放NavigationCommands.DecreaseZoom。我想在某些情况下禁用它,所以我绑定CanExecute方法为该命令返回 false,该命令运行良好并按预期禁用按钮。但是,如果我使用快捷键,缩小仍然有效"Ctrl + Subtract key"。我试图设置KeyBinding为相同的命令,假设 CanExecute 可以工作,但它没有。因为,KeyBinding 中没有提供 CanExecute。有人可以建议我如何在某些情况下禁用 KeyGesture“Ctrl -”(CanExecute 中的逻辑)而不是永久禁用。

相关代码——

<DocumentViewer Name="documentViewer1"
                        Margin="0,0,0,30"
                        Style="{DynamicResource DocumentViewerStyle1}">
   <DocumentViewer.CommandBindings>
        <CommandBinding Command="NavigationCommands.DecreaseZoom"
                        CanExecute="DecreaseZoom_CanExecute" />
   </DocumentViewer.CommandBindings>
   <DocumentViewer.InputBindings>
        <KeyBinding Command="NavigationCommands.DecreaseZoom"
                    Key="OemMinus"
                    Modifiers="Control" />
    </DocumentViewer.InputBindings>
</DocumentViewer>

背后的代码 -

private void DecreaseZoom_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
   if (((DocumentViewer)e.Source).PageViews.Count >= 3)
   {
       e.CanExecute = false;
       e.ContinueRouting = false;
       e.Handled = true;
   }
}
4

2 回答 2

1

您可以为此创建自定义命令,也可以创建自己的 InputGesture,并覆盖其行为,

 <KeyBinding.Gesture>
   <CustomInputGesture/>
 </KeyBinding.Gesture>
于 2011-11-29T07:16:32.000 回答
1

我解决了扩展 DocumentViewer 和覆盖方法 OnDecreaseZoomCommand 的问题。我尝试使用自定义命令,但如果我使用快捷键“Ctrl -”,它的事件处理程序不会被击中。但这对我有用 -

public class ExtendedDocumentViewer : DocumentViewer
{
   protected override void OnDecreaseZoomCommand()
   {
      if (PageViews.Count < 3)
      {
         base.OnDecreaseZoomCommand();
      }
   }
}
于 2011-11-29T13:02:24.850 回答