SharePoint2010的页面风格发生了很大的改变,其页面风格类似于Office的视图,这种视图被称为功能区(Ribbon)视图。
一、服务器功能区的体系结构
Microsoft SharePoint Foundation 2010 中的服务器功能区可创建一致的用户界面来处理 SharePoint 对象。您可以使用服务器功能区 XML 和简单的 ECMAScript(JavaScript、JScript)以声明方式扩展功能区,也可以针对更高级的情形使用功能区 XML 和页面组件。
功能区中的首要元素就是选项卡。选项卡显示在 SharePoint 网站页面的顶部。每个选项卡都包含多个组。这些组又包含多组控件。每个组可以包含多个控件,并具有一个标签来标识该组。组内的控件包括按钮、下拉菜单、复选框、组合框、拆分按钮和库。其中每个控件都绑定到一个唯一的命令。
服务器功能区是使用服务器功能区 XML 在功能清单文件或用户自定义操作中定义的。功能区 XML 用于定义各个选项卡、组和控件。Tab 元素包含一个Groups 元素。每个 Groups 元素又有多个 Group 元素。Group 元素内是一个 Controls 元素,该元素又包含多种类型的控件。服务器功能区中的控件部分列出了可用的控件类型。有关功能区 XML 的详细说明,请参阅服务器功能区 XML。
功能区使用多个对象与页面的其余部分进行交互。它必须知道启用了哪些控件、控件的状态以及何时进行刷新。服务器功能区使用CommandDispatcher、PageManager、PageComponent 等对象进行通信。其中每个对象在与功能区的交互中都扮演着重要角色。
PageManager 可初始化所有控件并向功能区注册 PageComponent 对象。PageManager 的一个实例位于该页面上。
CommandDispatcher 负责处理所有 PageComponent 对象以及这些对象可以处理的命令。在页面上收到命令后,CommandDispatcher 会接收该命令并将其传递给正确的 PageComponent。
PageComponent 在 ECMAScript(JavaScript、JScript)中创建并处理由 CommandDispatcher 传递的命令。将 PageComponent 添加到页面中后,您可以使用 JavaScript 创建 PageComponent 的实例,并将其注册到 PageManager 中。然后,PageComponent 即可响应您在功能区 XML 中定义的命令。

图中的标注号指向以下特定组件:
- 选项卡
- 组
- 控件
- 上下文选项卡组
三、使用页面组件实现服务器功能区命令
除了使用命令 UI 处理程序外,还可以使用页面组件。页面组件是一个在外部脚本库 (.js) 文件中定义的 JavaScript 对象。该对象实现了几个属性和方法,它们将告知服务器功能区命令基础结构如何初始化该对象、该对象可处理哪些命令以及某个特定命令是否可用,并可在页面组件接收焦点或失去焦点时做出响应。
必须将此脚本文件添加到显示功能区自定义项的同一页面中。可通过多种方法来实现这一点。第一种方法是,使用 SharePoint 2010 中的新 <CustomAction ScriptSrc="" /> 功能,根据功能的范围将库添加到网站、网站集、Web 应用程序或服务器场中的所有页面。另一种方法是,从自定义应用程序或网站页面 (.aspx)、自定义用户控件 (.ascx) 或自定义服务器控件内的托管代码添加脚本。以下代码示例将向 Web 部件内的页面添加页面组件文件。
本例在自定义ASPX页面中实现:
ASPX
注意:1、继承母版:DynamicMasterPageFile="~masterurl/default.master"
2、如果没有继承母版页,需自定义Sharepoint Ribbon控件
2 <%@ Register Tagprefix= " SharePoint " Namespace= " Microsoft.SharePoint.WebControls " Assembly= " Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c " %>
3 <%@ Register Tagprefix= " Utilities " Namespace= " Microsoft.SharePoint.Utilities " Assembly= " Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c " %>
4 <%@ Register Tagprefix= " asp " Namespace= " System.Web.UI " Assembly= " System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 " %>
5 <%@ Import Namespace= " Microsoft.SharePoint " %>
6 <%@ Assembly Name= " Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c " %>
7 <%@ Page Language= " C# " AutoEventWireup= " true " CodeBehind= " ApplicationPage1.aspx.cs " Inherits= " SpRibbon2.ApplicationPage1 " DynamicMasterPageFile= " ~masterurl/default.master " %>
8
9 <asp:Content ID= " PageHead " ContentPlaceHolderID= " PlaceHolderAdditionalPageHead " runat= " server ">
10
11 </asp:Content>
12
13
14 <asp:Content ID= " Main " ContentPlaceHolderID= " PlaceHolderMain " runat= " server ">
15 asdhkasjhfsadf sdfsdalfjaklsjdfklasjdfklasjdfo;
16 <asp:Label ID= " Label1 " runat= " server " Text= " Label "></asp:Label>
17 </asp:Content>
18
19 <asp:Content ID= " PageTitle " ContentPlaceHolderID= " PlaceHolderPageTitle " runat= " server ">
20 应用程序页sdfsaf
21 </asp:Content>
22
23 <asp:Content ID= " PageTitleInTitleArea " ContentPlaceHolderID= " PlaceHolderPageTitleInTitleArea " runat= " server " >
24 我的应用程序页asdfasd asdf
25 </asp:Content>
26
27
28
29 <asp:Content ContentPlaceHolderID= " PlaceHolderPageImage " runat= " server ">
30 </asp:Content>
31
32 <asp:Content runat= " server " ContentPlaceHolderID= " PlaceHolderPageDescription ">
33 </asp:Content>
34
35
36 <asp:Content ContentPlaceHolderID= " PlaceHolderLeftNavBar " runat= " server ">
37 xvzxcv asdfasdf asdfa dfasfdsadfsadfsafas
sharePoint Ribbon控件代码(本例未使用,可参考MSDN)
<SharePoint:SPRibbon ID= " SPRibbon1 "
runat= " server "
PlaceholderElementId= " RibbonContainer "
CssFile= "">
<SharePoint:SPRibbonPeripheralContent ID= " SPRibbonPeripheralContent1 "
runat= " server "
Location= " TabRowLeft "
CssClass= " ms-siteactionscontainer s4-notdlg ">
<%-- Insert the Site Actions Menu Here --%>
</SharePoint:SPRibbonPeripheralContent>
<%-- Insert the Global Navigation Here --%>
<SharePoint:SPRibbonPeripheralContent
runat= " server "
Location= " TabRowRight "
ID= " RibbonTabRowRight "
CssClass= " s4-trc-container s4-notdlg ">
<%-- Insert the Top-Right Corner Controls Here --%>
</SharePoint:SPRibbonPeripheralContent>
</SharePoint:SPRibbon>
</div>
<div id= " notificationArea " class= " s4-noti ">
<%-- Notifications will appear in this div element. --%>
</div>
</div>
C#
1、继承:LayoutsPageBase
2、重写:
override void OnPreRender(EventArgs e)
3 using System.Web;
4 using System.Web.UI;
5 using System.Web.UI.WebControls;
6 using System.Web.UI.WebControls.WebParts;
7 using Microsoft.SharePoint;
8 using Microsoft.SharePoint.WebControls;
9
10 namespace SpRibbon2
11 {
12 public partial class ApplicationPage1 : LayoutsPageBase
13 {
14 protected void Page_Load( object sender, EventArgs e)
15 {
16 }
17
18 protected override void OnPreRender(EventArgs e)
19 {
20 try
21 {
22 SPRibbon ribbon = SPRibbon.GetCurrent( this);
23 if (ribbon != null)
24 {
25 ScriptLink.RegisterScriptAfterUI( this, " SP.Ribbon.js ", false, true);
26 ribbon.CommandUIVisible = true;
27 ribbon.MakeTabAvailable( " Ribbon.Read ");
28 // 加载及激活自定义上下文Tab页。
29 ribbon.MakeTabAvailable( " Ribbon.PropertyChangerTab ");
30 ribbon.MakeContextualGroupInitiallyVisible( " Ribbon.WebPartContextualTabGroup ", string.Empty);
31 }
32 base.OnPreLoad(e);
33 }
34 catch (Exception ex)
35 {
36 throw ex;
37 }
38 }
39 }
40 }
四、创建服务器功能区组件自定义项
创建一个上下文选项卡组,一个带两个组的选项卡和几个控件。详细结构可参考:Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\XML\CMDUI.XML。
feature.xml
1 <?xml version="1.0" encoding="utf-8" ?>
3 Scope ="Web"
4 Id ="94269D73-8DF2-4515-B501-4C2111FF9DAF"
5 xmlns ="http://schemas.microsoft.com/sharepoint/" >
6 < ElementManifests >
7 < ElementManifest Location ="element.xml" />
8 </ ElementManifests >
9 </ Feature >
Element.xml
2 < Elements xmlns ="http://schemas.microsoft.com/sharepoint/" >
3 < CustomAction Id ="WebPartContextualTabs"
4 Location ="CommandUI.Ribbon" >
5 < CommandUIExtension >
6 < CommandUIDefinitions >
7 < CommandUIDefinition Location ="Ribbon.ContextualTabs._children" >
8 < ContextualGroup Id ="Ribbon.WebPartContextualTabGroup"
9 ContextualGroupId ="WebPartContextualTab"
10 Title ="Ribbonized Web Part Tools"
11 Sequence ="150"
12 Color ="Green"
13 Command ="WebPartContextualTab.OnEnableContextualTab" >
14 < Tab Id ="Ribbon.PropertyChangerTab"
15 Title ="Tools"
16 Sequence ="501" >
17 < Scaling Id ="Ribbon.PropertyChangerTab.Scaling" >
18 < MaxSize Id ="Ribbon.PropertyChangerTab.MaxSize"
19 GroupId ="Ribbon.PropertyChangerTab.PropertyGroup"
20 Size ="LargeLarge" />
21 < MaxSize Id ="Ribbon.PropertyChangerTab.MaxSize"
22 GroupId ="Ribbon.PropertyChangerTab.PostBackGroup"
23 Size ="LargeLarge" />
24 </ Scaling >
25 < Groups Id ="Ribbon.PropertyChangerTab.Groups" >
26 < Group Id ="Ribbon.PropertyChangerTab.PropertyGroup"
27 Title ="Edit"
28 Description ="General Web Part properties."
29 Sequence ="15"
30 Template ="Ribbon.Templates.Flexible2" >
31 < Controls Id ="Ribbon.PropertyChangerTab.PropertyGroup.Controls" >
32 < Button Id ="Ribbon.PropertyChangerTab.PropertyGroup.GeneralDialogButton"
33 LabelText ="General Properties"
34 TemplateAlias ="o1"
35 Sequence ="15"
36 Image16by16 ="/_layouts/Images/WebPartRibbonContextualTab/16x16Placeholder.png"
37 Image32by32 ="/_layouts/Images/WebPartRibbonContextualTab/32x32Placeholder.png" />
38 < Button Id ="Ribbon.PropertyChangerTab.PropertyGroup.UXDialogButton"
39 LabelText ="Display Properties"
40 TemplateAlias ="o2"
41 Sequence ="17"
42 Image16by16 ="/_layouts/Images/WebPartRibbonContextualTab/16x16Placeholder.png"
43 Image32by32 ="/_layouts/Images/WebPartRibbonContextualTab/32x32Placeholder.png" />
44 </ Controls >
45 </ Group >
46 < Group Id ="Ribbon.PropertyChangerTab.PostBackGroup"
47 Title ="PostBack"
48 Sequence ="25"
49 Template ="Ribbon.Templates.Flexible2" >
50 < Controls Id ="Ribbon.PropertyChangerTab.PropertyGroup.Controls" >
51 < Button Id ="Ribbon.PropertyChangerTab.PropertyGroup.GeneralDialogButton"
52 LabelText ="Write to Web Part"
53 Command ="WebPartContextualTabs.OnPostback"
54 TemplateAlias ="o1"
55 Sequence ="15"
56 Image16by16 ="/_layouts/Images/WebPartRibbonContextualTab/16x16Placeholder.png"
57 Image32by32 ="/_layouts/Images/WebPartRibbonContextualTab/32x32Placeholder.png" />
58 </ Controls >
59 </ Group >
60 </ Groups >
61 </ Tab >
62 </ ContextualGroup >
63 </ CommandUIDefinition >
64 </ CommandUIDefinitions >
65
66 < CommandUIHandlers >
67 < CommandUIHandler Command ="WebPartContextualTab.OnEnableContextualTab"
68 CommandAction =""
69 EnabledScript ="return true;" />
70 < CommandUIHandler Command ="WebPartContextualTabs.OnPostback"
71 CommandAction ="javascript:__doPostBack('RibbonizedWebPartPostback','');" />
72 </ CommandUIHandlers >
73
74 </ CommandUIExtension >
75 </ CustomAction >
76 </Elements>
五、部署
feature部署:拷贝feature.xml和Element.xml文件到SharePoint目录下:
xcopy ..\Features\*.xml "X:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\SpRibbon2\" /y
ASPX文件部署:
DLL文件部署:
xcopy SpRibbon2.dll "C:\inetpub\wwwroot\wss\VirtualDirectories\80\bin\" /y
六、Feature功能安装和激活 【2011-12-15补充】
打开"Visual Studio 命令提示(2010)"工具,定位到“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN”。
1、安装功能:
stsadm -o installfeature -name SpRibbon2 -url http://localhost:80
2、激活功能
stsadm -o activatefeature -name SpRibbon2 -url http://localhost/
七、Sharepoint测试
添加链接
更详细的操作详见microsoft MSDN