WPF: как переопределить метод CanExecute для ApplicationCommands - PullRequest
3 голосов
/ 27 марта 2010

Я использую стандартные команды Cut, Copy и Paste (которые являются частью класса ApplicationCommands). Можно ли переопределить метод CanExecute?

Вот мой код:

XAML:

   <Window.CommandBindings>
        <CommandBinding Command="Copy"
                CanExecute="CopyCanExecute" Executed="CopyExecuted"/>       
    </Window.CommandBindings>

    <StackPanel>
        <TextBox Name="txt"></TextBox>
        <Button Command="Copy" CommandTarget="{Binding ElementName=txt}">copy</Button>
    </StackPanel>

Код-за:

private void CopyCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;
}

private void CopyExecuted(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Copy Executed");
}  

Кнопка по-прежнему ведет себя так, как будто ее команда является стандартной командой копирования.

Ответы [ 4 ]

1 голос
/ 03 мая 2011

Команда копирования не будет работать, если фокус находится на текстовом поле, где команды уже были обработаны, но она будет работать с такими элементами, как CheckBox и т. Д.

1 голос
/ 27 марта 2010

Вы делаете это через CommandBinding . Локальная привязка CommandBinding может указывать CanExecuteHandler.

Подробнее и рабочий пример см. в этом блоге .

0 голосов
/ 12 апреля 2019

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

0 голосов
/ 28 марта 2010

В обработчике CanExecute может потребоваться добавить `e.Handled = true;также, чтобы он не шел и не выполнял стандартную функцию Copy.CanExecute ()

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