2009-11-30 3 views
0

Я строй собственного splitbutton, который состоит из двух перекрывающихся кнопок и всплывающие окон - как это (изображение показывает некоторые общие splitbutton):WPF: Как сделать кнопку (splitbutton) включенной, когда ее связанная команда не может выполнить?

SplitButton http://windowsclient.net/wf/blogs/jfoscoding/splitbutton.PNG

Мой SplitButton открывает всплывающее Whan правой стороны со стрелкой щелчка, и выполняет SplitButton.Command, когда нажата основная кнопка.

В моем случае, однако иногда действие по умолчанию не может быть выполнено, и в тех случаях, когда нажата основная кнопка, я бы хотел открыть всплывающее окно.

я достиг его, но проблема заключается в следующем:

  • SplitButton является подклассами ToggleButton
  • в ControlTemplate, у меня есть ToggleButton (нижний) и кнопку (короче, наложенных друг на друга на вершине)
  • Button.Command="{TemplateBinding Command}" (так что я могу сделать <SplitButton Command="{Binding MyDefaultAction}">...)
  • проблемы: когда команда не может выполнить, весь SplitButton получает инвалид.

Я хотел бы, чтобы с той же командой, но переопределить поведение кнопки так, чтобы он не стал инвалидом, когда Command.CanExecute() возвращает ложь. Как я могу это сделать?

Спасибо!

ответ

0

Команда является свойством зависимостей, и я уверен, что она наследуется любым элементом управления под ним в визуальном дереве. Таким образом, для кнопки, которую вы не хотите отключать, установите для свойства команды другую команду или ее значение null также может работать.

В качестве альтернативы,

Создайте свое собственное свойство зависимостей ... как этого

Dependency Propert

+0

Ну, проблема в том, что я все равно хочу кнопку, чтобы выполнить данную команду, я только не» t он должен быть отключен, когда команда не может выполнить. Однако я посмотрел на реализацию в ButtonBase (с Reflector), и отключение кнопки выполняется частными методами - поэтому я не могу их переопределить. Мне, вероятно, придется вырвать необходимую функциональность из демонстрационного представления Reflector и создать ICommand DP, который будет находиться под моим контролем. Спасибо за идею. –

 Смежные вопросы

  • Нет связанных вопросов^_^