You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazor中实现带切换按钮的侧边栏菜单

Blazor实现带图标切换的Bootstrap 5侧边栏示例

1. 依赖准备

确保你的Blazor项目中已引入Bootstrap 5样式和Font Awesome图标库(用于菜单图标),可通过项目的_Layout.cshtml(Server项目)或index.html(WASM项目)添加资源链接:

<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- Bootstrap 5 JS(可选,用于Bootstrap原生交互组件) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

2. 侧边栏组件代码(Sidebar.razor)

创建可复用的侧边栏组件,通过Blazor布尔绑定控制展开/折叠状态:

<div class="d-flex">
    <!-- 侧边栏容器 -->
    <div class="@SidebarContainerClass" style="min-height: 100vh;">
        <div class="p-3">
            <!-- 切换按钮 -->
            <button class="btn btn-link text-white mb-4" @onclick="ToggleSidebar">
                <i class="@ToggleIconClass"></i>
            </button>

            <!-- 菜单列表 -->
            <ul class="nav flex-column">
                <li class="nav-item mb-3">
                    <a class="nav-link text-white" href="#">
                        <i class="fa-solid fa-house me-3"></i>
                        <span class="@MenuTextClass">首页</span>
                    </a>
                </li>
                <li class="nav-item mb-3">
                    <a class="nav-link text-white" href="#">
                        <i class="fa-solid fa-user me-3"></i>
                        <span class="@MenuTextClass">用户管理</span>
                    </a>
                </li>
                <li class="nav-item mb-3">
                    <a class="nav-link text-white" href="#">
                        <i class="fa-solid fa-cog me-3"></i>
                        <span class="@MenuTextClass">设置</span>
                    </a>
                </li>
                <li class="nav-item mb-3">
                    <a class="nav-link text-white" href="#">
                        <i class="fa-solid fa-question-circle me-3"></i>
                        <span class="@MenuTextClass">帮助</span>
                    </a>
                </li>
            </ul>
        </div>
    </div>

    <!-- 主内容区域 -->
    <div class="flex-grow-1 p-4">
        <h2>主内容区</h2>
        <p>这里放置页面核心内容</p>
    </div>
</div>

@code {
    private bool _isSidebarCollapsed = false;

    // 根据状态动态生成CSS类
    private string SidebarContainerClass => _isSidebarCollapsed ? "bg-dark text-white w-auto" : "bg-dark text-white w-25";
    private string MenuTextClass => _isSidebarCollapsed ? "d-none" : "";
    private string ToggleIconClass => _isSidebarCollapsed ? "fa-solid fa-chevron-right" : "fa-solid fa-chevron-left";

    // 切换侧边栏状态
    private void ToggleSidebar()
    {
        _isSidebarCollapsed = !_isSidebarCollapsed;
    }
}

3. 核心逻辑说明

  • 用布尔变量_isSidebarCollapsed跟踪侧边栏状态,点击切换按钮时反转状态
  • 通过动态绑定CSS类实现布局变化:
    • 展开状态:侧边栏占页面25%宽度,显示完整菜单文字
    • 折叠状态:侧边栏自动适配图标宽度,隐藏文字仅保留图标
    • 切换按钮图标随状态切换为左箭头/右箭头,提示操作方向
  • 主内容区用flex-grow-1占满剩余空间,保持响应式布局

4. 组件使用

在目标页面(如Index.razor)中直接引用组件即可:

@page "/"

<Sidebar />

这个示例基于Blazor原生绑定实现,无需额外JS交互,完全适配Bootstrap 5布局规范,满足侧边栏折叠为仅显示图标的需求。

内容的提问来源于stack exchange,提问作者Yana R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:40:28