【发布时间】:2014-09-02 21:58:38
【问题描述】:
我正在尝试使用 Caliburn Micro 和 MVVM 作为菜单。我目前正在使用位于 System.Windows.Controls.Ribbon 中的功能区控件。使用 x:Name 绑定单击事件对于选项卡中的常规按钮可以正常工作,但 RibbonApplicationMenu 中的菜单项不起作用。这是一个错误还是我必须在引导程序类中做一些额外的工作以确保 CM 找到 RibbonApplicationMenuItems?我在 CM v2.0.1 上。
这里有一些例子:
XAML:
<Ribbon x:Name="Ribbon" >
<Ribbon.ApplicationMenu>
<RibbonApplicationMenu KeyTip="F">
<RibbonApplicationMenuItem Header="{Binding NewText}" x:Name="AppNew" />
</RibbonApplicationMenu>
</Ribbon.ApplicationMenu>
<RibbonTab Header="{Binding OverviewTabText}" >
<RibbonGroup x:Name="MainGroupOverview" Header="{Binding MainGroupText}">
<RibbonButton Label="{Binding NewText}" x:Name="AppNewOverview" />
</RibbonGroup>
</RibbonTab>
</Ribbon>
在 ViewModel 类中:
public void AppNew()
{
//this will not be called
New();
}
public void AppNewOverview()
{
//this works just fine
New();
}
【问题讨论】:
-
因为这些项目不在可视树菜单项中,所以可能在寻找执行方法时遇到问题。我假设您单击并没有任何反应? Cal:Action.TargetWithoutContext = "{Binding path=DataContext, ElementName=Ribbon}" 将其放在应用程序菜单上。
-
是的,我点击并没有任何反应。好像 CM 没有遍历树中的所有节点?或者在这种情况下,它是一个子树“ApplicationMenu”,它有自己的树,也许这就是问题所在?
-
CM 如何获取模板和/或上下文菜单(如您的情况)是一个问题,上述代码中的 Action 依赖对象应该可以工作。在可视化树上不会立即可见
-
在
和 节点上尝试过,但没有成功。可能是什么问题? -
仍在研究此问题,但属性名称似乎对任何事情都不起作用,实际上是在我这边模拟了一个样本。 cm:Message.Attach="[Event Click]=[Action NewApp()]" 有效。真的很奇怪,如果这确实是一个问题,您可能想访问 GitHub 存储库并填写。
标签: c# wpf xaml caliburn.micro ribbon