5

我正在使用 Microsoft 的功能区控制库 for 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>

如果我单击拆分按钮的上部,则命令 SplitButtonCommand 会像往常一样执行一次。

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

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

4

4 回答 4

6

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

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

RibbonMenuItem 触发命令两次

于 2014-01-09T11:46:21.403 回答
5

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

<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();
}
于 2014-12-04T10:09:39.127 回答
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 的使用

于 2014-01-09T13:22:28.667 回答
0

由于这是设计上的错误:),将Template属性转换为新资源并TemplateBindingsPART_HeaderButton's中删除COMMANDCOMMANDPARAMETER并且COMMANDTARGET(即完全删除这三个属性),因为它们是导致重复调用的“功能”的来源命令。

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

于 2015-03-18T20:18:55.437 回答