我正在使用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项),则该项目的命令将被执行两次。
有没有人有任何线索导致问题?
答案 0 :(得分:4)
看来它可能是设计上看看这篇文章。提到了一种解决方法
答案 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,COMMANDPARAMETER和COMMANDTARGET中移除TemplateBindings(即完全删除这3个属性),因为它们是“功能“导致重复调用命令。
如果您愿意,可以将此ControlTemplate应用于所有按钮。