Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有子项的WPF功能区应用程序菜单执行子项和父项回调_Wpf_Callback_Ribbon - Fatal编程技术网

带有子项的WPF功能区应用程序菜单执行子项和父项回调

带有子项的WPF功能区应用程序菜单执行子项和父项回调,wpf,callback,ribbon,Wpf,Callback,Ribbon,我使用的是微软新的WPF ribbon(2010年10月发布),我用RibbonApplicationSplitMenuItem设计了我的应用程序菜单。如果用户单击RibbonApplicationSplitMenuItem,我想打开程序设置对话框。这些子项包含指向“设置”对话框中各个选项卡页面的直接链接,我希望在选中所选页面的情况下打开“设置”对话框 <ribbon:RibbonApplicationSplitMenuItem Header="Settings" x:Name="

我使用的是微软新的WPF ribbon(2010年10月发布),我用
RibbonApplicationSplitMenuItem设计了我的应用程序菜单。如果用户单击
RibbonApplicationSplitMenuItem
,我想打开程序设置对话框。这些子项包含指向“设置”对话框中各个选项卡页面的直接链接,我希望在选中所选页面的情况下打开“设置”对话框

<ribbon:RibbonApplicationSplitMenuItem
  Header="Settings"
  x:Name="SettingsItem"
  Click="settingsClicked"
>
  <ribbon:RibbonApplicationMenuItem
    Header="Scanner Settings"
    x:Name="scannerSettingsItem"
    Click="scannerSettingsClicked"
  />
  <ribbon:RibbonApplicationMenuItem
    Header="Printer Settings"
    x:Name="printerSettingsItem"
    Click="printerSettingsClicked"
  />
</ribbon:RibbonApplicationSplitMenuItem>

我的问题是,当用户单击“扫描仪设置”子项时,首先执行
scannerSettingsClicked()
回调,然后执行
settingsClicked()
回调,导致设置对话框在关闭后再次显示

VisualStudio的WPF设计器中的属性窗口也拒绝显示回调订阅,除非删除父项的回调或所有子项的回调,所以我想我一定是做错了什么


如何实现所需的行为?

在子项“单击事件”中,设置
e.Handled=true
以防止事件冒泡回到父项。

I通过测量scannerSettingsClicked()结束和settingsClicked()开始之间经过的时间来“解决”这一问题。如果小于500毫秒,我假设是后续呼叫,什么也不做。不太好,但是完成了任务。。。