2011-06-16 64 views
3

我正在將功能區與我的webpart關聯。我需要在頁面中添加兩個以上的webparts。多個webparts和SharePoint中的功能區

我不想爲每個webpart都有單獨的上下文組/選項卡。有沒有辦法檢查頁面上當前功能區是否存在特定的組/標籤?

在這一點上,當我添加多個Web部件的頁面,我一收到以下錯誤:

Item has already been added. Key in dictionary: 'Ribbon.MyContextualTabGroup' Key being added: 'Ribbon.MyContextualTabGroup'

這是我對你的參考代碼:

/// <summary> 
/// Gets the web part contextual info. 
/// </summary> 
public WebPartContextualInfo WebPartContextualInfo 
{ 
    get 
    { 
     var webPartContextualInfo = new WebPartContextualInfo(); 
     var webPartRibbonContextualGroup = new WebPartRibbonContextualGroup(); 
     var webPartRibbonTab = new WebPartRibbonTab(); 

     webPartRibbonContextualGroup.Id = "Ribbon.MyContextualTabGroup"; 
     webPartRibbonContextualGroup.Command = "MyContextualTab.EnableContextualGroup"; 
     webPartRibbonContextualGroup.VisibilityContext = "MyContextualTab.CustomVisibilityContext"; 

     webPartRibbonTab.Id = "Ribbon.MyTab"; 
     webPartRibbonTab.VisibilityContext = "MyContextualTab.CustomVisibilityContext"; 

     webPartContextualInfo.ContextualGroups.Add(webPartRibbonContextualGroup); 
     webPartContextualInfo.Tabs.Add(webPartRibbonTab); 
     webPartContextualInfo.PageComponentId = SPRibbon.GetWebPartPageComponentId(this); 

     return webPartContextualInfo; 
    } 
} 

/// <summary> 
/// Adds the contextual tab. 
/// </summary> 
private void AddContextualTab() 
{ 
    SPRibbon spRibbon = SPRibbon.GetCurrent(Page); 

    if (spRibbon == null) return; 

    var ribbonExtensions = new XmlDocument(); 

    ribbonExtensions.LoadXml(_contextualTab); 
    spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild, "Ribbon.ContextualTabs._children"); 

    ribbonExtensions.LoadXml(_contextualTabTemplate); 
    spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild, "Ribbon.Templates._children"); 
} 

/// <summary> 
/// The event handler for the System.Web.UI.Control.PreRender event that occurs immediately before the Web Part is rendered to the Web Part Page it is contained on. 
/// </summary> 
/// <param name="e">A System.EventArgs that contains the event data.</param> 
protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 

    AddContextualTab(); 

    ClientScriptManager clientScriptManager = Page.ClientScript; 
    clientScriptManager.RegisterClientScriptBlock(GetType(), "MyWebPart", DelayScript); 
} 

回答

2

上下文色帶不能在Web部件的不同實例之間共享。由於功能區僅在您的Web部件實例在頁面上具有「焦點」時纔會顯示。因此,Web部件的多個實例必須創建它們自己的上下文組。

要避免功能區ID複製,請將Web部件實例特定部分附加到功能區ID。你可以使用網頁部分的ID

webPartRibbonContextualGroup.Id = "Ribbon.MyContextualTabGroup." + ID; 
// ... 
webPartRibbonTab.Id = "Ribbon.MyTab." + ID; 
// etc. 
+0

我以前試過這個。我想我必須回到這個。您能否與我分享一些技巧,如何根據Web部件的焦點隱藏/顯示上下文組?對我來說,默認情況下,它顯示所有兩個組。 – Moon 2011-06-17 16:58:41