2014-01-09 106 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應用於所有按鈕。