2011-01-11 58 views
2

我目前正在使用PRISM和Microsoft WPF Ribbon控件构建一个应用程序。我迄今已经能够突出部添加到使用RegionManager通过编码壳XAML如下色带...WPF Microsoft.Windows.Controls.Ribbon.RibbonApplicationMenu&PRISM

... 
<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),并相应地添加它们,那么它们也可以工作。

我想这里的问题(是的,我终于得到它)是如何最好的方法呢?

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

在此先感谢您的帮助。

+0

为了记录,我查看了http://blog.joachim.at/?p=44,http://wpf.codeplex.com/wikipage?title=WPF%20Ribbon%20Preview&ProjectName=wpf,http: //stalamoni.blogspot.com/2009/02/creating-ribbontab-programatically.html,http://bartekszafko.pl/2008/11/29/en-wpf-ribbon-in-prism-applications/和http:///blogsprajeesh.blogspot.com/2009/09/prism-creating-custom-region-adapter.html寻求灵感。 – 2011-01-11 21:43:19

回答

2

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

这在Prism文档的this section(位于区域适配器)中进行了说明。

前段时间我创建了一个Region Adapter for the Accordion Control,你可能也会觉得有用。

我希望这会有所帮助。

+1

+1我同意。为`RibbonApplicationMenu`定制`RegionAdapter`是最好的选择。 – decyclone 2011-01-12 12:50:29

1

你可以找到一个RbbonRegionAdapter here的代码。它为我工作。