C# RibbonSplitButton命令执行两次

C# RibbonSplitButton命令执行两次,c#,.net,wpf,ribboncontrolslibrary,C#,.net,Wpf,Ribboncontrolslibrary,我正在使用Microsoft for WPF的Ribbons控件库在我们的WPF应用程序中私有一个Ribbon 在XAML部分中,我们以以下方式使用拆分按钮: <r:RibbonSplitButton Label="SplitButtonLabel" LargeImageSource="..." Command="{Binding SplitButtonCommand}"> <r:RibbonSplitMenuItem Header="Item 1" ImageSource

我正在使用Microsoft for WPF的Ribbons控件库在我们的WPF应用程序中私有一个Ribbon

在XAML部分中,我们以以下方式使用拆分按钮:

<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>

如果我单击Split按钮的上部,命令SplitButtonCommand将正常执行一次

如果我单击SplitButton的底部,然后单击任何MenüItem(例如Item 1),则该项的命令将执行两次


有人知道问题的原因吗?

看来这可能是有意为之,看看这篇文章吧。这里提到了一个解决方法:

虽然这是RibbonControl的本质,但您可以尝试解决此问题 通过解析ExecutedRoutedEventArgs并检查 OriginalSource与Source相同,如果是,则获取此命令 执行

正如所说,这种行为似乎是故意的

我像下面的例子一样处理更改代码的问题

<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>


我将RibbonSplitMenuItem的用法替换为使用RibbonButtons和提供的SmallImageSource

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

<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>

由于这是一个设计缺陷:),请将
模板
属性转换为新资源,并从
部件头部按钮
命令
命令参数
命令目标
中删除
模板绑定
(即将这3个属性一起删除),因为它们是“功能”的来源导致重复调用该命令


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

感谢您非常有用的回答:-)这是最好的答案,因为它符合WPF的工作方式。
private void Click_1(object sender, RoutedEventArgs e)
{
    e.Handled = true;
    ((YourViewModel)DataContext).Command1();
}