2014-01-09 69 views
2

我正在使用Microsoft的Ribbons Control Libary for WPF在我们的WPF应用程序中提供一个功能区。RibbonSplitButton命令被执行两次

我们使用Splitbuttons在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> 

如果我点击拆分按钮命令SplitButtonCommand通常执行一次,因为它的上部。

如果我单击SplitButton的底部部分,然后单击任何菜单项(例如项目1),此项目的命令将执行两次。

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

回答

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> 

我用RibbonButtons与所提供的SmallImageSource

+0

好的解决方法没想到+1 – SWilko

3

又一个解决办法取代RibbonSplitMenuItem的使用情况,您可以使用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> 


而且里面的单击事件处理程序,将Handled属性设置为true:

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

这是最好的答案,因为它符合WPF的工作方式。 – Epirocks

0

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

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