Blazor 中的侧边栏并没有什么特别之处。如果您检查MainLayout.razor,您将看到对具有sidebar 类的NavMenu 组件的引用:
<div class="sidebar">
<NavMenu />
</div>
如果您打开NavMenu.razor,您会发现它只是一个Bootstrap Navbar,方便地打包在一个可重复使用的组件中。
更新
Blazor 使用 Bootstrap 使其余问题成为样式表问题,而不是 Blazor 问题。
Blazor 模板的样式表是为这种类似于 Explorer 的特定布局而构建的 - 左侧是垂直导航栏,右侧是主要区域。颜色,尺寸,最重要的是流量,都是为此而设计的。修改一个样式类是不够的。
另一方面,Razor 页面 样式表是为“经典”引导程序外观而构建的,菜单在顶部,容器和行在中间,页脚和页眉。这意味着,我们可以从新的 Razor Pages 应用程序“借用”样式表和布局。
- 使用
dotnet new webapp 创建一个新项目
- 删除 Blazor 的
site.css 中除第一行之外的所有内容:
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
- 将 Razor 的
site.css 的内容复制到 Blazor 的 site.css。该文件应如下所示:
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
...
- 修改 Blazor 的
Shared\MainLayout.razor 以模仿 Razor 的 Shared\_Layout.cshtml 中的结构:
@inherits LayoutComponentBase
<header>
<NavMenu />
</header>
<div class="container">
<main role="main" class="pb-3">
@Body
</main>
</div>
这里没有页脚,因为 Blazor 模板中没有 Privacy 页面。
- 修改
Shared\NavMenu.razor 以使用Razor 模板的结构和样式。 <a> 元素需要替换为 NavLink 元素。另一个棘手的部分是 Razor 中的切换器通过 data-toggle="collapse" data-target 属性工作,这在 Blazor 中不起作用。这就是需要点击处理程序的原因:
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" href="">blazornav</a>
<button class="navbar-toggler" type="button" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<NavLink class="nav-link text-dark" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link text-dark" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link text-dark" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
</NavLink>
</li>
</ul>
</div>
</div>
</nav>
点击处理程序只是将collapse 类添加或删除到从 Razor 复制的基本导航栏样式
@code {
bool collapseNavMenu = true;
string baseMenuClass = "navbar-collapse d-sm-inline-flex flex-sm-row-reverse";
string NavMenuCssClass => baseMenuClass + (collapseNavMenu ? " collapse" : "");
void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
这会产生一个水平菜单,右侧有一个切换器: