将多个元素添加到Prism区域

时间:2011-08-29 14:59:30

标签: c# .net prism ribbon-control

我正在使用Prism和Microsoft WPF功能区,一切都运行良好,但我的上下文选项卡有问题。我在Shell.xaml中定义了上下文选项卡:

<Ribbon:Ribbon.ContextualTabGroups>
    <Ribbon:RibbonContextualTabGroup Header="CTG1" Visibility="Visible" Background="Red" />
    <Ribbon:RibbonContextualTabGroup Header="CTG2" Visibility="Visible" Background="Blue" />
    <Ribbon:RibbonContextualTabGroup Header="CTG3" Visibility="Visible" Background="Purple" />
    <Ribbon:RibbonContextualTabGroup Header="CTG4" Visibility="Visible" Background="Green" />
    <Ribbon:RibbonContextualTabGroup Header="CTG5" Visibility="Visible" Background="Orange" />
    <Ribbon:RibbonContextualTabGroup Header="CTG6" Visibility="Visible" Background="Violet" />
</Ribbon:Ribbon.ContextualTabGroups>

这种方式在我的模块中我可以参考那些上下文选项卡组,它很有效。但我想在模块中定义contextualtabgroups。我想到了定义一个地区:

<Ribbon:Ribbon.ContextualTabGroups x:Name="RibbonContextualTabs" prism:RegionManager.RegionName="RibbonContextualTabs" />

然后在我的模块中,我会有一个UserControl,它继承了每个的RibbonContextualTabGroup并注册了那些区域......有没有办法只使用一些ContextualTabGroups定义一个usercontrol并将它们作为一个整体添加?例如:

<Ribbon:RibbonContextualTabContainer x:Class="Views.ContextualTabsView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:Ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
    <Ribbon:RibbonContextualTabGroup Header="CTG1" Visibility="Visible" Background="Red" />
    <Ribbon:RibbonContextualTabGroup Header="CTG2" Visibility="Visible" Background="Blue" />
    <Ribbon:RibbonContextualTabGroup Header="CTG3" Visibility="Visible" Background="Purple" />
</Ribbon:RibbonContextualTabContainer>

作为ContextualTabsView.xaml并在我的模块中创建

_regionManager.RegisterViewWithRegion("RibbonContextualTabs", typeof (ContextualTabsView));

我不知道我是否清楚自己要完成的任务,但我会感激任何帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

前段时间我遇到了同样的问题(但我使用的是Teleriks Ribbon Bar)。我找不到任何方法来添加模块中的标签,或者更少地从XAML添加标签。

我所做的是这样的服务:

public class RibbonService
{
    public PrioritySet<RibbonTab> Tabs { get; private set; }
    public PrioritySet<object> QuickAccess { get; private set; }
    public PrioritySet<ContextualGroup> ContextualGroup { get; private set; }
}

此条款具有以下结构:

diagram for the clases above

这里的关键是类PrioritySet,为了使它更简单,它只是一个集合,其中每个项目具有相关的优先级。

现在,如果在您的框架上注册了这样的服务,那么您可以从模块添加选项卡。请记住,您的shell项目需要获取RibbonService,然后将项集合绑定到Tabs属性 - 请注意,PrioritySet实现了INotifyCollectionChanged,因此如果功能区绑定了它的项目将自动更新。

同样有了这个,你可以得到一些有趣的东西,从服务组成标签。例如,一个模块可能只需要在功能区上添加一个按钮,这可以通过

轻松完成
_ribbonService.Tabs.Add(new RibbonButton(){Header = "Button", Icon = new Uri("icon.png")})

在我的应用中,我有标签&gt;群组&gt;按钮使每个模块都可以完全控制功能区。另请注意,从模块中您可以添加所需的所有项目,但模块无法从功能区中删除项目,只需少了它的引用,或者是创建项目的项目。

相关问题