WPF:如何使按钮(splitbutton)在';s绑定命令无法执行?

WPF:如何使按钮(splitbutton)在';s绑定命令无法执行?,wpf,button,icommand,commandbinding,split-button,Wpf,Button,Icommand,Commandbinding,Split Button,我正在构建一个自定义splitbutton,它由两个重叠的按钮和弹出窗口组成,如下所示(图中显示了一些通用splitbutton): 我的SplitButton在单击带有箭头的右侧打开弹出窗口,并在单击主按钮时执行SplitButton.Command 但在我的情况下,有时默认操作无法执行,在这些情况下,当单击主按钮时,我希望打开弹出窗口 我已经完成了,但问题是: SplitButton是ToggleButton的子类 在ControlTemplate中,我有一个ToggleButton(底

我正在构建一个自定义splitbutton,它由两个重叠的按钮和弹出窗口组成,如下所示(图中显示了一些通用splitbutton):

我的SplitButton在单击带有箭头的右侧打开弹出窗口,并在单击主按钮时执行SplitButton.Command

但在我的情况下,有时默认操作无法执行,在这些情况下,当单击主按钮时,我希望打开弹出窗口

我已经完成了,但问题是:

  • SplitButton是ToggleButton的子类
  • 在ControlTemplate中,我有一个ToggleButton(底部)和一个Button(较短,覆盖在顶部)
  • Button.Command=“{TemplateBinding Command}”
    (所以我可以做
  • 问题:当命令无法执行时,整个SplitButton将被禁用。
我希望继续使用相同的命令,但要覆盖按钮的行为,这样当command.CanExecute()返回false时,它就不会被禁用。我该怎么做


谢谢大家!

命令是一个依赖属性,我很确定它是由可视化树中它下面的任何控件继承的。因此,对于不希望禁用的按钮,将command属性设置为其他命令或将其设置为null也可能有效

或者

创建您自己的依赖项属性…就像这个


问题是,我仍然希望按钮执行给定的命令,我只是不希望它在命令无法执行时被禁用。然而,我研究了ButtonBase(带有Reflector)中的实现,禁用按钮是由私有方法完成的,因此我无法覆盖它们。我可能不得不从Reflector的反汇编视图中删除所需的功能,并创建一个由我控制的ICommand DP。谢谢你的主意。