2011-08-29 91 views
3

我使用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> 

這樣在我的模塊,可以參考我的上下文選項卡組和它的偉大工程。但我想定義模塊中的上下文選項卡組。我想定義一個區域的:

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

然後我的模塊中我有一個繼承RibbonContextualTabGroup爲每一個用戶控件並註冊那些與該地區...有沒有辦法只規定了一些一個UserControl ContextualTabGroups並將它們添加爲一個整體?例如:

<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)); 

,如果我自己清楚的就是我要完成的,我不知道,但我將不勝感激任何幫助。

謝謝。

回答

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; } 
} 

這clases具有以下結構:

diagram for the clases above

這裏的關鍵是類PrioritySet,使其更簡單,它只是一個集合,每個項目的優先級都是相關的。

現在,如果像這樣的服務在您的框架中註冊,那麼您可以從模塊中添加選項卡。請記住,您的shell項目需要獲取RibbonService,然後將項目集合綁定到Tabs屬性 - 請注意,PrioritySet實現INotifyCollectionChanged,因此如果功能區綁定了它,項目將自動更新。

此外,你可以得到一些intresting的東西,作爲組成服務的選項卡。例如一個模塊可能只需要一個按鈕添加到功能區,這可以很容易地做到做

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

在我的應用程序,我有標籤>組>按鈕,使每個模塊都有在功能區的完全控制。還要注意,從模塊中可以添加所需的所有項目,但模塊無法從功能區中刪除項目,而不能從項目中刪除項目,或者只能創建項目。

+0

太棒了。好的方法。我爲了我的需要對其進行了簡化,但效果很好。謝謝。 –