RibbonSplitButton命令执行两次

时间:2014-01-09 08:50:42

标签: c# .net wpf ribboncontrolslibrary

我正在使用Microsoft的Ribbons Control Libary为WPF提供WPF应用程序中的功能区。

我们在XAML部件中以下列方式使用Splitbuttons:

<r:RibbonSplitButton Label="SplitButtonLabel" LargeImageSource="..." Command="{Binding SplitButtonCommand}">
  <r:RibbonSplitMenuItem Header="Item 1" ImageSource="..." Command="{Binding Command1}"/>
  <r:RibbonSplitMenuItem Header="Item 2" ImageSource="..." Command="{Binding Command2}"/>
  <r:RibbonSplitMenuItem Header="Item 3" ImageSource="..." Command="{Binding Command3}"/>
</r:RibbonSplitButton>

如果我点击分割按钮的上半部分,Command SplitButtonCommand会像往常一样执行一次。

如果我点击SplitButton的底部部分然后点击任何Menü项目(例如第1项),则该项目的命令将被执行两次。

有没有人有任何线索导致问题?

4 个答案:

答案 0 :(得分:4)

看来它可能是设计上看看这篇文章。提到了一种解决方法

RibbonMenuItem triggers command twice

答案 1 :(得分:3)

另一种解决方法是,您可以使用点击事件:

<r:RibbonSplitButton Label="SplitButtonLabel" LargeImageSource="..." Click="Split_Click">
  <r:RibbonSplitMenuItem Header="Item 1" ImageSource="..." Click="Click_1"/>
  <r:RibbonSplitMenuItem Header="Item 2" ImageSource="..." Click="Click_2"/>
  <r:RibbonSplitMenuItem Header="Item 3" ImageSource="..." Click="Click_3"/>
</r:RibbonSplitButton>


在click事件处理程序中,将Handled属性设置为true:

private void Click_1(object sender, RoutedEventArgs e)
{
    e.Handled = true;
    ((YourViewModel)DataContext).Command1();
}

答案 2 :(得分:1)

正如dellywheel所说,似乎这种行为是设计的。

我像以下示例一样处理了更改我的代码的问题。

<r:RibbonSplitButton Label="SplitButtonLabel" LargeImageSource="..." Command="{Binding SplitButtonCommand}">
  <r:RibbonButton Label="Item 1" SmallImageSource="..." Command="{Binding Command1}"/>
  <r:RibbonButton Label="Item 2" SmallImageSource="..." Command="{Binding Command2}"/>
  <r:RibbonButton Label="Item 3" SmallImageSource="..." Command="{Binding Command3}"/>
</r:RibbonSplitButton>

我使用带有提供的SmallImageSource的RibbonButtons替换了RibbonSplitMenuItem的用法

答案 3 :(得分:0)

由于这是设计错误:),将Template属性转换为新资源并从PART_HeaderButton的COMMAND,COM​​MANDPARAMETER和COMMANDTARGET中移除TemplateBindings(即完全删除这3个属性),因为它们是“功能“导致重复调用命令。

如果您愿意,可以将此ControlTemplate应用于所有按钮。