上次修改时间: 2010年11月1日
适用范围: SharePoint Foundation 2010
显示在 Microsoft SharePoint Foundation 2010 中的大多数内容页上的顶部链接栏是紧邻网站标题和说明之下的水平选项卡式条带。第一个选项卡是"主页"位置,通常具有指向网站主页的链接。栏上的其他链接通常指向位于网站层次结构中较低位置的网站。
顶部链接栏由创建网站中网页布局的母版页中定义的 AspMenu 控件呈现。在 SharePoint Foundation 2010 中,内容页和应用程序页面的主母版页是 v4.master。您可以通过修改 v4.master 中的标记来更改顶部链接栏的外观。
自定义顶部链接栏
您可以通过设置呈现顶部链接栏的导航节点的 AspMenu 控件的属性来更改栏的外观。有关控件的标记及其数据源的详细讨论,请参阅导航控件。
例如,您可以设置添加用于在栏上的链接下显示从属项的弹出菜单的属性。此更改有助于消除拥挤的顶部链接栏上的混乱情形,因为它使您能够使用静态菜单上的链接作为类别并将从属链接移动到类别之下的弹出菜单中。
将弹出菜单添加到顶部链接栏中
在 SharePoint Designer 2010 中,打开要自定义的网站。
在导航窗格中,选择"母版页"。
右键单击"v4.master",然后单击"复制"。
右键单击"母版页"窗格的空白区域,然后单击"粘贴"。
将创建文件"v4_copy(1).master"。
右键单击"v4_copy(1).master",单击"重命名",然后键入一个新名称,例如 my.master。
打开新文件进行编辑。
找到顶部链接栏的菜单控件。您可以在代码视图中通过搜索以下字符串找到该控件:
ID="TopNavigationMenuV4"
将 StaticDisplayLevels 属性和 MaximumDynamicDisplayLevels 属性的值设置为 1,如下所示。
<SharePoint:AspMenu ID="TopNavigationMenuV4" Runat="server" EnableViewState="false" DataSourceID="topSiteMap" AccessKey="<%$Resources:wss,navigation_accesskey%>" UseSimpleRendering="true" UseSeparateCss="false" Orientation="Horizontal" StaticDisplayLevels="1"MaximumDynamicDisplayLevels="1" SkipLinkText="" CssClass="s4-tn"/>
在"文件"菜单上单击"保存"。
备注
如果在浏览器中打开了网站映射页,则您可能无法保存对网站的默认母版页进行的更改。如果发生此情况,请关闭浏览器,然后重试。
在导航窗格中,选择"母版页"。
右键单击您的母版页的名称,然后单击"设置为默认母版页"。
备注
通过编写设置 SPWeb.MasterUrl 属性值的代码,您还可以将自定义母版页设置为默认母版页。
当顶部链接栏上的节点之一包含子节点时,会显示弹出菜单。以下控制台应用程序创建一个显示文本为"Resources"的新节点并添加一个显示文本为"SharePoint Developer Center"的子节点。
using System;
using System.Linq;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb("parent"))
{
if (!web.Navigation.UseShared)
{
string resTitle = "Resources";
string resUrl = web.Navigation.Home.Url;
string spdevTitle = "SharePoint Developer Center";
string spdevUrl = "https://msdn.microsoft.com/sharepoint";
// Get the top link bar.
SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;
// If a Resources link exists, get it.
SPNavigationNode resLink = topnav
.Cast<SPNavigationNode>()
.FirstOrDefault(n => n.Title == resTitle);
// If the Resources link does not exist, create it.
if (resLink == null)
{
resLink = new SPNavigationNode(resTitle, resUrl);
resLink = topnav.AddAsLast(resLink);
}
// If the Resources node has a SharePoint Dev Center child, get it.
SPNavigationNode spdevLink = resLink
.Children
.Cast<SPNavigationNode>()
.FirstOrDefault(n => n.Url == spdevUrl);
// If the item does not exist, create it.
if (spdevLink == null)
{
spdevLink = new SPNavigationNode(spdevTitle, spdevUrl, true);
spdevLink = resLink.Children.AddAsLast(spdevLink);
}
}
}
}
Console.Write("\nPress ENTER to continue....");
Console.ReadLine();
}
}
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation
Module ConsoleApp
Sub Main()
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb()
If Not web.Navigation.UseShared Then
Dim resTitle As String = "Resources"
Dim resUrl As String = web.Navigation.Home.Url
Dim spdevTitle As String = "SharePoint Developer Center"
Dim spdevUrl As String = "https://msdn.microsoft.com/sharepoint"
' Get the top link bar.
Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar
' If a Resources link exists, get it.
Dim resLink As SPNavigationNode = topnav.Cast(Of SPNavigationNode)().FirstOrDefault( _
Function(n) n.Title = resTitle)
' If the Resources link does not exist, create it.
If resLink Is Nothing Then
resLink = New SPNavigationNode(resTitle, resUrl)
resLink = topnav.AddAsLast(resLink)
End If
' If the Resources node has a SharePoint Dev Center child, get it.
Dim spdevLink As SPNavigationNode = resLink.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
Function(n) n.Url = spdevUrl)
' If the item does not exist, create it.
If spdevLink Is Nothing Then
spdevLink = New SPNavigationNode(spdevTitle, spdevUrl, True)
spdevLink = resLink.Children.AddAsLast(spdevLink)
End If
End If
End Using
End Using
Console.Write(vbCrLf & "Press ENTER to continue....")
Console.Read()
End Sub
End Module
顶部链接栏继承
子网站的顶部链接栏可以继承父网站的顶部链接栏上的导航链接,而不用定义自己的一组链接。具有此配置的顶部链接栏可以为在父网站和子网站之间移动的用户提供一致的体验。有关详细信息,请参阅如何:共享网站之间的顶部链接栏。
不过,您应知道将子网站的顶部链接配置为"使用来自父级的链接"仅意味着子网站使用父级的顶部链接栏后面的站点地图。将继承顶部链接栏的内容。但其呈现方式仍由子网站自己的默认母版页和自己的内容页中的标记确定。虽然这一事实可能看上去显而易见,但很容易被忽略。
跨所有子网站实现一致的呈现方式的一种方法是设置子网站的 MasterUrl 属性,以便它指向父网站的母版页。不过,此方法会撤消其他本地自定义项,因此可能不恰当。较好的方法可能是通过对每个网站的默认母版页进行相同的更改来重复顶部链接栏的标记中的更改。