SukiUI BusyArea 控件详解:用 IsBusy 为 Avalonia 界面添加加载遮罩
UI组件桌面应用【免费下载链接】SukiUIUI Theme for AvaloniaUI项目地址https://gitcode.com/gh_mirrors/su/SukiUI点击查看免费下载BusyArea 是 SukiUI 为 AvaloniaUI 提供的一个忙碌状态容器控件当程序正在执行耗时任务如登录、数据加载、文件读写时它会在内容上方显示加载指示器并让底层内容半透明、禁用交互。本文以 BusyArea 官方文档 为主线结合仓库源码讲解它的属性、模板结构、绑定方式与实战用法读完你就能在自己的 SukiUI 页面中快速实现带状态提示的加载遮罩。基本用法三行 XAML 让内容进入忙碌态官方文档给出的最小示例非常简洁一个BusyArea包裹任意内容通过两个属性控制状态suki:BusyArea BusyTextBusy... IsBusy{Binding IsBusy} ... /suki:BusyAreaIsBusybool默认false是否处于忙碌状态。为true时显示加载动画并淡化内容为false时恢复正常显示。通常绑定到 ViewModel 中的属性。BusyTextstring?默认null显示在加载动画下方的提示文字例如Busy...、Signing In...。不设置时该 TextBlock 自动隐藏。这两项属性在 BusyArea.axaml.cs 中注册为 StyledProperty类型为SukiUI.Controls.BusyArea的派生类UserControl因此它可以直接放在任何布局容器中使用并支持数据绑定。绑定 ViewModel在耗时任务前后切换状态IsBusy是普通可绑定属性最常见的做法是把它接到 MVVM 的ObservableProperty上。仓库 Demo 的 MiscViewModel.cs 给出了完整示例[ObservableProperty] private bool _isBusy; [RelayCommand] private async Task ToggleBusy() { IsBusy true; await Task.Delay(3000); // 模拟耗时任务 IsBusy false; }对应的界面MiscView.axaml把卡片内容放进BusyArea点击按钮后整个卡片区域会进入 3 秒的忙碌状态suki:GlassCard MaxWidth300 suki:BusyArea BusyTextBusy... IsBusy{Binding IsBusy} suki:GroupBox HeaderBusy Area StackPanel Spacing10 TextBlock Classesh3 TextWrappingWrapClick this button to set the card area busy for 3 seconds./TextBlock Button HorizontalAlignmentCenter Command{Binding ToggleBusyCommand} ContentClick Me. / /StackPanel /suki:GroupBox /suki:BusyArea /suki:GlassCard这里的要点是BusyArea只负责视觉状态的切换真正的耗时逻辑Task.Delay、异步 IO 等由 ViewModel 在置IsBusy true与IsBusy false之间完成。你不需要手动管理动画的启停控件会随绑定值自动响应。真实场景登录表单的 Signing In 遮罩DashboardView.axaml 中有一个更贴近生产的例子登录按钮被BusyArea包裹登录时显示Signing In...同时按钮本身通过ButtonExtensions.ShowProgress也进入进度态suki:BusyArea NameBusySignIn BusyTextSigning In... IsBusy{Binding IsLoggingIn} StackPanel !-- 用户名、密码输入框等表单内容 -- /StackPanel /suki:BusyArea Button NameButtonSignIn suki:ButtonExtensions.ShowProgress{Binding IsLoggingIn} ClassesFlat Rounded Command{Binding LoginCommand} Sign In /ButtonViewModel 侧DashboardViewModel.cs同样是先置IsLoggingIn true任务结束再置回false[RelayCommand] private Task Login() { IsLoggingIn true; return Task.Run(async () { await Task.Delay(3000); IsLoggingIn false; }); }这种遮罩 按钮进度组合非常适合登录、支付确认、表单提交等交互忙碌期间用户无法重复点击也不容易误操作底层内容。静态用法与内置加载样式除了动态绑定BusyArea也可以静态固定为忙碌状态例如 AllControlsView.axaml 中的展示卡片suki:GroupBox ClassesTouch HeaderBusyArea suki:BusyArea Margin50 BusyTextLoading .. Width100 Height100 IsBusyTrue / /suki:GroupBoxBusyArea的加载动画来自 SukiUI 内置的 Loading.cs 控件它基于 SkiaSharp 运行时效果.sksl渲染支持三种样式Simple、Glow、Pellets见 Loading.cs。BusyArea默认使用Simple样式加载指示器颜色会跟随主题的主色SukiPrimaryColor自动适配明暗主题。模板与动画原理两层叠加 透明度过渡从 BusyArea.axaml 的 ControlTemplate 可以看到BusyArea内部是一个两层叠加的 PanelBusyContentContentControl承载你放入的实际内容通过Content{TemplateBinding Content}绑定。LoadingBusyAreaDockPanel居中显示加载层内部由PART_BusyText提示文字和加载动画的ContentPresenter组成。状态切换的视觉反馈完全由样式中的过渡与不透明度规则实现BusyArea.axamlStyle Selectorsuki|BusyArea DockPanel#LoadingBusyArea Setter PropertyTransitions Transitions DoubleTransition PropertyOpacity Duration0:0:0.3 / /Transitions /Setter /Style Style Selectorsuki|BusyArea[IsBusyTrue] /template/ DockPanel#LoadingBusyArea Setter PropertyOpacity Value1 / /Style Style Selectorsuki|BusyArea[IsBusyFalse] /template/ DockPanel#LoadingBusyArea Setter PropertyOpacity Value0 / /Style Style Selectorsuki|BusyArea[IsBusyTrue] /template/ ContentControl#BusyContent Setter PropertyOpacity Value0.1 / /Style Style Selectorsuki|BusyArea[IsBusyFalse] /template/ ContentControl#BusyContent Setter PropertyOpacity Value1 / /StyleIsBusy True加载层不透明度 1完全可见内容层不透明度降到0.1轻微淡化暗示不可用。IsBusy False加载层不透明度 0隐藏内容层恢复1。两层均带 0.3 秒的DoubleTransition过渡因此切换是平滑淡入淡出而非生硬跳变。值得注意的细节加载层的ContentPresenter设置了IsHitTestVisibleFalseBusyArea.axaml并把IsBusy经转换器映射为内容——它的渲染完全由状态驱动本身不拦截鼠标事件。幕后细节Loading 动画如何被塞进来加载层中的ContentPresenter绑定使用了 ProgressToContentConverter.cspublic object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is bool booleanValue booleanValue true) { return new Loading() { LoadingStyle LoadingStyle.Simple }; } return new Panel(); }即当IsBusy true时向ContentPresenter注入一个Loading控件默认Simple样式否则注入一个空的Panel。这样加载动画是否存在就完全由绑定值驱动无需在代码里手动增删控件。而Loading控件本体Loading.cs在挂载到可视树时通过ElementComposition.CreateCustomVisual创建自定义视觉对象并把对应的.sksl运行时效果simple/glow/pellets内嵌在 Content/Shaders/Loading 目录作为消息发送给绘制句柄前景色默认取动态资源SukiPrimaryColor从而与主题色保持一致。这也是为什么BusyArea在明暗主题下都不需要额外配色。使用建议与注意事项不要遮挡关键操作BusyArea只做视觉遮罩本身不强制禁用内部控件。若需防止重复提交建议结合ButtonExtensions.ShowProgress或对按钮IsEnabled一并绑定参见上面登录示例。配合 MVVM 使用最顺手IsBusy是标准 StyledProperty与CommunityToolkit.Mvvm的[ObservableProperty]天然契合推荐用try/finally包裹异步逻辑确保异常时也能恢复IsBusy false。文字可选BusyText为null时提示文字自动隐藏模板中通过StringConverters.IsNotNullOrEmpty控制可见性不需要文字时直接省略该属性。加载样式目前BusyArea固定使用Simple样式如需Glow/Pellets等更丰富的加载效果可以单独使用 Loading.cs 控件并自行组合布局。相关资源官方文档docs/docs/zh/documentation/controls/data/busyarea.md控件源码SukiUI/Controls/BusyArea.axaml、BusyArea.axaml.cs加载动画实现SukiUI/Controls/Loading.cs 及 SukiUI/Content/Shaders/Loading 下的.sksl效果转换器SukiUI/Converters/ProgressToContentConverter.csDemo 示例MiscView.axaml、MiscViewModel.cs、DashboardView.axaml赞分享UI组件桌面应用【免费下载链接】SukiUIUI Theme for AvaloniaUI项目地址https://gitcode.com/gh_mirrors/su/SukiUI点击查看免费下载相关推荐SukiUI BusyArea 控件实战为 AvaloniaUI 内容区域打造可绑定的加载遮罩SukiUI BusyArea 控件实战为 AvaloniaUI 内容区域打造可绑定的加载遮罩 BusyArea 是 SukiUI 为 AvaloniaUIUI组件桌面应用GRBL-Plotter终极指南如何用开源G代码控制器打造专业级CNC加工系统GRBL Plotter终极指南如何用开源G代码控制器打造专业级CNC加工系统 作为一款功能强大的开源G代码发送器GRBL Plotter不仅支持激光雕刻和桌面应用智能硬件GoPDF图像处理详解JPG/PNG图片添加与遮罩应用GoPDF图像处理详解JPG/PNG图片添加与遮罩应用 想要在Go语言中轻松生成包含精美图片的PDF文档吗 GoPDF库为开发者提供了简单高效的图像处理开发工具上一篇B站视频一键摘要神器3秒掌握视频核心内容告别无效观看下一篇php-domain-parser完全指南如何快速解析域名并提取公共后缀创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

melonJS 精灵、帧动画与纹理图集实战:从 anchorPoint 定位陷阱到 NineSliceSprite 与对象池

melonJS 精灵、帧动画与纹理图集实战:从 anchorPoint 定位陷阱到 NineSliceSprite 与对象池

游戏开发图形学 【免费下载链接】melonJS a modern & lightweight HTML5 game engine 项目地址: https://gitcode.com/gh_mirrors/me/melonJS 点击查看 免费下载 本文以 melonJS 官方技能文档(packages/melonjs/skills/melonjs-sprites-and-animati…

2026/10/6 7:37:40 阅读更多 →
OpenEvolve Prompt 进化优化实战指南:基于 GEPA 基准的 LLM 提示词自动调优

OpenEvolve Prompt 进化优化实战指南:基于 GEPA 基准的 LLM 提示词自动调优

人工智能大模型AI Agent代码智能体自主智能体 【免费下载链接】openevolve Open-source implementation of AlphaEvolve 项目地址: https://gitcode.com/gh_mirrors/op/openevolve 点击查看 免费下载 OpenEvolve 是一个开源的 AlphaEvolve 实现,它把「程…

2026/10/7 7:54:38 阅读更多 →
Language Server Protocol 文件删除事件:workspace/didDeleteFiles 通知详解

Language Server Protocol 文件删除事件:workspace/didDeleteFiles 通知详解

开发工具 【免费下载链接】language-server-protocol Defines a common protocol for language servers. 项目地址: https://gitcode.com/gh_mirrors/la/language-server-protocol 点击查看 免费下载 导读 workspace/didDeleteFiles 是 LSP(Language S…

2026/10/7 7:54:57 阅读更多 →

最新新闻

DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

提到内存条PCB设计,很多人第一反应是“不就是照着公版抄吗”,真正自己从零开始画一块能跑稳DDR4的8层板,各种坑能埋得你怀疑人生。这篇不聊虚的,直接拆解一套完整的DDR4内存条PCB设计实战方案,重点放在8层板层叠规划、…

2026/10/7 12:54:52 阅读更多 →
DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

做DDR4内存条PCB设计,表面上看就是把上百根走线拉通、等长做齐,但真正动手之后会发现,最难的不是线的数量,而是如何在内存条这巴掌大的空间里,同时满足阻抗、等长、串扰和电源完整性四个维度的约束。最近我完成了一款8…

2026/10/7 12:54:52 阅读更多 →
智能体安全挑战与防护:从提示词注入到多智能体协同的实操指南

智能体安全挑战与防护:从提示词注入到多智能体协同的实操指南

1. 智能体安全挑战的底层逻辑拆解1.1 从CNCC2026大会论坛议题说起CNCC2026大会论坛把“智能体的安全挑战”单独拎出来做议题,这个信号本身就值得琢磨。我做智能体开发差不多三年,从最早的扣子、Dify这类平台搭建,到后来用Python自己写Agent框…

2026/10/7 12:54:52 阅读更多 →
NCC旋转匹配实战:工业视觉中抗光照与偏斜的鲁棒定位方案

NCC旋转匹配实战:工业视觉中抗光照与偏斜的鲁棒定位方案

简介:本资源是一份面向计算机视觉初学者与进阶开发者的OpenCVPython实战项目,聚焦于解决图像在任意旋转角度下的模板匹配难题。通过归一化互相关(NCC)结合圆投影、积分图加速与多尺度降采样三大核心技术,显著提升旋转鲁…

2026/10/7 12:54:52 阅读更多 →
大模型网关:企业自动化编程落地的治理基石

大模型网关:企业自动化编程落地的治理基石

说实话,最初让我动笔写这篇东西的,并不是“大模型网关”这个概念听起来有多新——真正让我觉得值得梳理清楚的,是最近一年里我发现身边越来越多团队已经不再讨论“要不要用大模型写代码”,而是已经开始讨论“怎么才能让大模型写代…

2026/10/7 12:54:51 阅读更多 →
Java实现腾讯位置数据热力图实时渲染系统

Java实现腾讯位置数据热力图实时渲染系统

简介:这是一套基于Java开发的腾讯位置大数据平台区域热力图可视化系统,以岳麓山景区为实际案例,面向Java初学者与大数据入门学习者,适用于课程设计、毕业设计及工程实训等实践场景。系统通过调用腾讯位置大数据API获取人流量数据&…

2026/10/7 12:53:51 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →