Blazor模板,顶部带有菜单

Cal*_*nus 1 .net-core blazor

我已经从VS2019模板创建了一个新的blazor应用程序,该模板的菜单为侧边栏。我花了大部分时间来尝试使菜单像当前的MVC模板一样穿过页面顶部,但完全无法到达任何地方!

有没有人拥有从侧面和顶部移开导航栏的blazor模板?

Cal*_*nus 23

按照@Panagiotis Kanavos 给出的建议,我设法为顶部菜单栏创建了一个基本模板/解决方案:

BlazorTopMenu


Pan*_*vos 5

Blazor的侧边栏没有什么特别的。如果进行检查,MainLayout.razor您会看到对NavMenu组件的引用,其sidebar类别为:

<div class="sidebar">
    <NavMenu />
</div>
Run Code Online (Sandbox Code Playgroud)

如果打开NavMenu.razor,则会看到它只是Bootstrap Navbar,很方便地包装在可重用的组件中。

更新资料

Blazor使用Bootstrap,它使其余问题成为样式表问题,而不是Blazor问题。

小萤幕

Blazor模板的样式表是为这种特定的类似于Explorer的布局而构建的-左侧为垂直导航栏,右侧为主要区域。颜色,大小和最重要的是流动是为此目的而设计的。修改单个样式类是不够的。

另一方面,Razor页面样式表是为“经典” Bootstrap外观而构建的,菜单位于顶部,容器和行位于中间,页脚和页眉。这意味着,我们可以从新的Razor Pages应用程序“借用”样式表和布局。

  1. 使用创建一个新项目 dotnet new webapp
  2. 删除Blazor中site.css除第一行以外的所有内容:
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
Run Code Online (Sandbox Code Playgroud)
  1. 将Razor's的内容复制site.css到Blazor's 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;
  }
...
Run Code Online (Sandbox Code Playgroud)
  1. 修改Blazor's Shared\MainLayout.razor以模仿Razor's的结构Shared\_Layout.cshtml
@inherits LayoutComponentBase


<header>
  <NavMenu />
</header>

<div class="container">
    <main role="main" class="pb-3">
        @Body
    </main>
</div>
Run Code Online (Sandbox Code Playgroud)

由于PrivacyBlazor模板中没有页面,因此这里没有页脚。

  1. 修改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>
Run Code Online (Sandbox Code Playgroud)

点击处理程序只是将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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将产生一个水平菜单,在右侧具有一个切换器:

大萤幕

  • “删除 Blazor 的 site.css 中除第一行之外的所有内容:”我再强调这一点都不为过,不要删除 main.css 中的所有内容,您必须保留“#blazor-error-ui”和“#blazor-error-ui” .dismiss”CSS规则。如果您不保留这些,那么在开发应用程序时,您将不会看到任何异常发生时的通知。如果使用服务器端 blazor,这还不错,因为 VS 调试器通常会中断,但在 WASM 模型中,除非维护错误 ui 样式,否则您不会在浏览器代码中看到异常。 (4认同)
  • @Calanus,*真正的*问题是整个网站的风格和布局。即使您从 NavMenu 内的导航栏中删除所有类,布局也会受到 *main* 内容的 `main` 和 `toprows` 样式类的影响。`site.css` 中指定的布局是为垂直导航栏制作的,其余部分用于内容。您应该从适合*您的*网站的新样式表开始。只是为了进行实验,您可以清除“site.css”文件或复制现有样式表 (2认同)