http://www.devx.com/dotnet/Article/34644/1954:
Вы можете отключить любую из включенных по умолчанию команд, добавив привязку CommandBinding. В приведенном ниже фрагменте атрибут CanExecute ссылается на обработчик событий, который может включать логику для предотвращения выполнения команды:
<RichTextBox.CommandBindings>
<CommandBinding
Command="EditingCommands.ToggleBold"
CanExecute="BlockTheCommand"/>
</RichTextBox.CommandBindings>
Соответствующий обработчик события в файле кода C # устанавливает два свойства объекта события. Если для параметра CanExecute установлено значение false, компоненты, связанные с событием, будут знать, что эта опция в данный момент недоступна. В этом случае, чтобы заблокировать команду ToggleBold, если для параметра CanExecute установлено значение false, кнопка Bold на панели инструментов будет отключена. Второе свойство, Handled, предотвращает передачу команды ToggleBold в RichTextBox:
protected void BlockTheCommand(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
e.Handled = true;
}
Если вы решите включить сложную логику в свои обработчики CanExecute, имейте в виду, что это событие часто запускается, потому что пользовательский интерфейс постоянно проверяет и повторно проверяет, доступна ли команда. Если вам необходимо получить доступ к таким ресурсам, как база данных или веб-служба, чтобы определить, должна ли команда быть доступной, убедитесь, что вы кэшируете ресурс и проверяете его только периодически, иначе это ухудшит вашу производительность.