CanExecute для связывания клавиш для управления - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть ReportViewer с кнопкой на панели инструментов по умолчанию для уменьшения масштаба, связанной с командой NavigationCommands.DecreaseZoom. Я хочу отключить его в некоторых ситуациях, поэтому я связываю метод CanExecute для возврата false для этой команды, которая прекрасно работает, и отключаю кнопку, как и ожидалось. Но все равно уменьшение масштаба работает, если я использую комбинацию клавиш "Ctrl + Subtract key". Я попытался установить KeyBinding для той же команды, предполагая, что CanExecute будет работать, но это не так. Поскольку CanExecute не предоставляется в KeyBinding. Может кто-нибудь предложить, как я могу отключить 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;
   }
}

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Я решил проблему с расширением DocumentViewer и переопределением метода OnDecreaseZoomCommand. Я пытался использовать пользовательскую команду, но обработчик событий не срабатывает, если я использую сочетание клавиш "Ctrl -". Но это работает для меня -

public class ExtendedDocumentViewer : DocumentViewer
{
   protected override void OnDecreaseZoomCommand()
   {
      if (PageViews.Count < 3)
      {
         base.OnDecreaseZoomCommand();
      }
   }
}
1 голос
/ 29 ноября 2011

Вы можете создать собственную команду для этого или создать собственную InputGesture и переопределить ее поведение,

 <KeyBinding.Gesture>
   <CustomInputGesture/>
 </KeyBinding.Gesture>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...