首页 > 其他分享 >MAUI Blazor学习19-角标(右上角红点)

MAUI Blazor学习19-角标(右上角红点)

时间:2024-10-31 22:49:53浏览次数:3  
标签:cnblogs 19 博客园 SunnyTrudeau 角标 MAUI Blazor com

MAUI Blazor学习19-角标(右上角红点)

 

MAUI Blazor系列目录

  1. MAUI Blazor学习1-移动客户端Shell布局 - SunnyTrudeau - 博客园 (cnblogs.com)
  2. MAUI Blazor学习2-创建移动客户端Razor页面 - SunnyTrudeau - 博客园 (cnblogs.com)
  3. MAUI Blazor学习3-绘制ECharts图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  4. MAUI Blazor学习4-绘制BootstrapBlazor.Chart图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  5. MAUI Blazor学习5-BLE低功耗蓝牙 - SunnyTrudeau - 博客园 (cnblogs.com)
  6. MAUI Blazor学习6-扫描二维码 - SunnyTrudeau - 博客园 (cnblogs.com)
  7. MAUI Blazor学习7-实现登录跳转页面 - SunnyTrudeau - 博客园 (cnblogs.com)
  8. MAUI Blazor学习8-支持多语言 - SunnyTrudeau - 博客园 (cnblogs.com)
  9. MAUI Blazor学习9-VS Code开发调试MAUI入门 - SunnyTrudeau - 博客园 (cnblogs.com)
  10. MAUI Blazor学习10-BarcodeScanner扫描二维码 - SunnyTrudeau - 博客园 (cnblogs.com)
  11. MAUI Blazor学习11-百度地图定位 - SunnyTrudeau - 博客园 (cnblogs.com)
  12. MAUI Blazor学习12-文件另存为 - SunnyTrudeau - 博客园 (cnblogs.com)
  13. MAUI Blazor学习13-打开文件 - SunnyTrudeau - 博客园 (cnblogs.com)
  14. MAUI Blazor学习14-选择目录 - SunnyTrudeau - 博客园 (cnblogs.com)
  15. MAUI Blazor学习15-采用html2pdf.js生成pdf - SunnyTrudeau - 博客园 (cnblogs.com)
  16. MAUI Blazor学习16-连续按BACK退出APP - SunnyTrudeau - 博客园 (cnblogs.com)
  17. MAUI Blazor学习17-NavigationLock阻止页面回退 - SunnyTrudeau - 博客园 (cnblogs.com)
  18. MAUI Blazor学习18-自动升级 - SunnyTrudeau - 博客园

 

角标(右上角红点)在各类软件中广泛应用,用来提示有新消息,提醒用户查看。安卓和iOS原生支持在导航栏菜单添加角标,MAUI Blazor是网页,需要借助css实现角标效果。很多网站的页面也有角标,可以查看网页源代码,参考着改一下。问AI也可以,给出的答案大同小异。

 

 采用Bootstrap badge组件方案

 

MAUI Blazor项目模板自带bootstrap组件库,可以直接使用badge组件,用来呈现带数字的角标,效果能凑合。 

在MablaApp项目中,修改导航栏菜单Todo,增加一个角标组件。如果消息数量大于0,就显示角标组件。采用弱引用的WeakReferenceMessenger订阅消息,防止内存泄露。需要NuGet安装CommunityToolkit.Mvvm。

 

 D:\Software\gitee\mauiblazorapp\MaBlaApp\Shared\NavMenu.razor

        <div class="navbarApp-item">
            <NavLink class="navbarApp-link" href="fetchdata">
                <div class="d-flex justify-content-between">
                    <span class="navbarApp-linkIcon oi oi-list-rich" aria-hidden="true"></span>
                    @if (MsgCount > 0)
                    {
                        <span class="badge rounded-pill bg-danger">@MsgCount</span>
                    }
                </div>
                <span class="navbarApp-linkLabel">@AppRes.Todo</span>
            </NavLink>
        </div>

    private int MsgCount = 0;

    private async void UpdateCount(object sender, TaskCounterMsg taskCounterMsg)
    {
        MsgCount = taskCounterMsg.Count;

        await InvokeAsync(() => StateHasChanged());
    }

    protected override void OnInitialized()
    {
        Debug.WriteLine($"{DateTime.Now}, NavMenu.OnInitialized, 订阅TaskCounterMsg");

        WeakReferenceMessenger.Default.Register<TaskCounterMsg>(this, UpdateCount);
    }

    public void Dispose()
    {
        // 取消注册消息接收,避免内存泄漏
        WeakReferenceMessenger.Default.UnregisterAll(this);

        Debug.WriteLine($"{DateTime.Now}, NavMenu.Dispose, 退订TaskCounterMsg");
    }

新增一个测试角标的页面,点击菜单递增消息数量,广播消息,导航栏组件订阅了消息,会自动更新角标显示。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Pages\TestBadge.razor

@page "/testbadge"
@using CommunityToolkit.Mvvm.Messaging

<h3>角标(右上角红点)</h3>
<p class="m-4" role="status">当前消息数量: @currentCount</p>
<button class="btn btn-primary m-4" @onclick="IncrementCount">递增消息数量</button>

@code {
    private int currentCount = 0;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            WeakReferenceMessenger.Default.Send(new TaskCounterMsg(currentCount));
        }
    }

    private void IncrementCount()
    {
        currentCount++;
        if (currentCount > 10)
            currentCount = 0;

        WeakReferenceMessenger.Default.Send(new TaskCounterMsg(currentCount));
    }
}

 

采用CSS方案

采用CSS方案实现右上角红点。首先要设置红点的容器元素采用相对定位,然后在容器内部添加一个span,采用绝对定位,在右上角绘制一个红色实心圆圈。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Shared\NavMenu.razor.css 

.reddotbox {
    position: relative;
}

.reddot {
    position: absolute;
    top: 0;
    right: -8px;
    background-color: red;
    border-radius: 50%;
    width: 8px;
    height: 8px;
}

 

在导航栏的home菜单添加右上角红点,如果消息数量对于0,就显示红点。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Shared\NavMenu.razor 

        <div class="navbarApp-item">
            <NavLink class="navbarApp-link" href="" Match="NavLinkMatch.All">
                <span class="navbarApp-linkIcon oi oi-home reddotbox" aria-hidden="true">
                    @if (MsgCount > 0)
                    {
                        <span class="reddot"></span>
                    }
                </span>
                <span class="navbarApp-linkLabel">@AppRes.Home</span>
            </NavLink>
        </div>

 

测试

在VS2022调试运行MablaApp项目,进入测试角标页面,点击增加消息数量,可以看到导航栏菜单角标数字、右上角红点变化。

DEMO代码地址:https://gitee.com/woodsun/mauiblazorapp

 

标签:cnblogs,19,博客园,SunnyTrudeau,角标,MAUI,Blazor,com
From: https://www.cnblogs.com/sunnytrudeau/p/18519071

相关文章

  • [极客大挑战 2019]Havefun
    链接:https://buuoj.cn/challenges#[极客大挑战2019]Havefun打开环境后如下所示。在BurpSuite中(或直接CTRL+U)查看源代码后,可以发现存在如下代码。$cat=$_GET['cat'];echo$cat;if($cat=='dog'){echo'Syc{cat_cat_cat_cat}';}尝试输入Payload:?cat=dog后即可......
  • 20222319 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1实验目的(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,......
  • [极客大挑战 2019]EasySQL
    题目链接:https://buuoj.cn/challenges#[极客大挑战2019]EasySQL。打开后,页面如下所示:可以看到,只有一个登录框,没有其他的内容,一般这种情况,应当先考虑SQL注入。在密码框中直接插入万能密码:'or1=1;#。成功获取flag。知其然,知其所以然。一些常见的登陆功能的后端实现......
  • [GWCTF 2019]xxor
    [GWCTF2019]xxor首先可以到汇编界面从新定义(U+P)一下main函数,不然看着会有点乱分析追踪input变量可以看到每次循环是获取四字节的输入但后面对于tmp变量的赋值我就有点看不懂了,不要紧,直接动调动态调试连接linux,下断点开调我不知道为什么输入字符会直接跳出循环,所以输入......
  • 找不到cmdw19.dll:快速解决办法
    当遇到“找不到cmdw19.dll”的错误提示时,这通常意味着系统中缺少了一个必要的动态链接库(DLL)文件。以下是一些快速解决办法:一、基础解决步骤重启计算机:有时,简单的重启可以解决临时问题,包括DLL文件加载错误。运行系统文件检查器(SFC):以管理员身份打开命令提示符(搜索“cm......
  • 19 内存与储存介质
    一般电脑内存是非永久性,电源断了,内存数据将全部丢失存储器是永久性的,除非被删除或覆盖最初用打孔纸卡纸带来存储,后来用延迟线存储器,利用声波来存储1,0数据。但只能顺序读取,不能任意读取出现磁芯存储器,电流方向改变磁性也改变,将磁芯排列成网格。这种可以随意读取。甚至刚......
  • NOIP2024 模拟赛19
    A拆位算贡献,枚举每一个位置,与操作两者都是\(1\),异或操作相反,或操作有一个是\(1\)即可。B观察到条件\(a_1\lek\)证明是必然有答案的,答案这样构成:从\(1\)走到任意点\(j\),然后\(j\)挖空,然后推到\(i\),记\(f_i\)为从\(1\)走到\(i\)的最小花费,答案\(i\)即为\(f_......
  • springboot停车系统-计算机毕业设计源码27192
    摘 要随着城市化进程的不断加快和汽车保有量的持续增加,城市停车难题成为居民生活中的一大挑战。针对停车资源紧张、停车管理效率低下等问题,智能停车系统应运而生。本研究旨在探讨基于安卓平台的停车系统的设计与实现,利用Java编程语言、MySQL数据库和SpringBoot框架,为用户提......
  • OCP 19c 考试费用和备考建议
    OCP的英文全称是OracleCertifiedProfessional,它是Oracle数据库管理员的中级认证,代表着对Oracle数据库的操作达到了中级水平。OCP19c 考试费用:OCP19c考试需要考2科,每科考试费大概2000元,总考试费用是4000左右(不含补考费),除了考试费,还需要到Oracle指定的WDP合作机构......
  • 基于ZU11EG或者ZU19EG的高性能双FMC 光纤PCIE载板
       基于ZU11EG或者ZU19EG的高性能双FMC光纤PCIE载板是一款高性能的FMC/FMC+载板。板载1个HPC形式的FMC连接器和1个HSPC形式的FMC+连接器。板卡选用了1片ZynqUltraScale+MPSoC家族的XCZU19EG-2FFVC1760芯片作为主控。其PS和PL各搭配1组9颗8bit1G......