2

我目前正在使用 PRISM 和 Microsoft WPF 功能区控件构建应用程序。到目前为止,我已经能够通过如下编码 shell XAML 来使用 RegionManager 将选项卡添加到功能区......

...
<r:Ribbon Grid.Row="0" prism:RegionManager.RegionName="{x:Static c:ShellRegion.Ribbon}">
</r:Ribbon>
...

然后在每个模块的 IModule.Initialize 方法期间向功能区添加其他选项卡,如下所示...

<r:RibbonTab x:Class="Views.RibbonView" Header="TabX">
    <r:RibbonGroup Header="GroupX">
        <r:RibbonButton Label="Button1" />
        <r:RibbonButton Label="Button2" />
    </r:RibbonGroup>
</r:RibbonTab>

public void Initialize() {
    this.regionManager.RegisterViewWithRegion(ShellRegion.Ribbon, typeof(Views.RibbonView));
}

我现在要做的是为 RibbonApplicationMenu 实现类似的东西。我尝试了以下...

<r:RibbonApplicationMenu x:Class="Views.ApplicationMenu">
    <r:RibbonApplicationMenuItem Header="MenuItem1" />
    <r:RibbonApplicationMenuItem Header="MenuItem2" />
</r:RibbonApplicationMenu>

public void Initialize() {
    this.regionManager.RegisterViewWithRegion(ShellRegion.ApplicationMenu, typeof(Views.ApplicationMenu));
}

但这实际上以嵌入在应用程序菜单中的应用程序菜单结束(想想单击下拉菜单,另一个下拉菜单也可供您单击)。

显然我可以看到两者之间的明显区别;对于选项卡,我添加了一个单独的 RibbonTab,对于菜单项,我实际上添加了另一个 RibbonApplicationMenu。问题是,我找不到任何关于创建我认为可以用来“将东西合并在一起”的“RegionAdapters”的文档;我理解为什么要添加单个 RibbonTab 的作品(尽管在未来的模块中可能需要添加多个 RibbonTab,我希望不必像我目前拥有的那样单独编码每个 RibbonTab 并按照上面的示例)。同样,我知道我将不正确的子项添加到 RibbonApplicationMenu,这就是为什么我会生成嵌入式 RibbonApplicationMenu 而如果我单独编码每个 RibbonApplicationMenuItem(因为我有 RibbonTab'

我想这里的问题(是的,我终于明白了)是如何最好地解决这个问题?

在理想的世界中,我希望能够拥有一个 XAML 文件(每个模块),其中包含我想要添加到 shell 的所有 RibbonTab。同样,我希望每个模块有一个 XAML 文件,其中包含我要添加到 RibbonApplicationMenu 的所有项目。最后,我希望能够像现在一样使用 RegionManager 添加这些。

提前感谢您的帮助。

4

2 回答 2

2

正如你所说,实现你想要做的最好的方法是创建一个自定义的 RegionAdapter。

这在 Prism 文档的这一部分(在Region Adapters下)中进行了解释。

前段时间我为 Accordion Control 创建了一个区域适配器,您可能会发现它也很有用。

我希望这有帮助。

于 2011-01-12T12:46:49.010 回答
1

您可以在此处找到 RbbonRegionAdapter 的代码。它对我有用。

于 2011-03-01T00:41:53.467 回答