news 2026/5/24 9:26:26

以下是针对 MaxWell 工业上位机项目的三个高级 Region 扩展实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
以下是针对 MaxWell 工业上位机项目的三个高级 Region 扩展实现

以下是针对 MaxWell 工业上位机项目的三个高级 Region 扩展实现,直接可用于生产环境。


1. Region 过渡动画模板(更丰富的动画效果)

AdvancedTransitionRegionBehavior.cs
// MaxWell.CommonBasis/Regions/Behaviors/AdvancedTransitionRegionBehavior.csusingPrism.Regions;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Media.Animation;namespaceMaxWell.CommonBasis.Regions.Behaviors;publicclassAdvancedTransitionRegionBehavior:RegionBehaviorBase{privateconstdoubleDurationSeconds=0.28;protectedoverridevoidOnAttach(){Region.Views.CollectionChanged+=(s,e)=>{if(e.NewItems!=null){foreach(varnewViewine.NewItems){if(newViewisFrameworkElementelement)ApplyEnterAnimation(element);}}if(e.OldItems!=null){foreach(varoldViewine.OldItems){if(oldViewisFrameworkElementelement)ApplyExitAnimation(element);}}};}privatevoidApplyEnterAnimation(FrameworkElementelement){element.Opacity=0;element.RenderTransform=newTranslateTransform{X=30};varstoryboard=newStoryboard();// 淡入varfade=newDoubleAnimation(0,1,TimeSpan.FromSeconds(DurationSeconds)){EasingFunction=newCubicEase{EasingMode=EasingMode.EaseOut}};Storyboard.SetTarget(fade,element);Storyboard.SetTargetProperty(fade,newPropertyPath("Opacity"));// 右滑进入varslide=newDoubleAnimation(30,0,TimeSpan.FromSeconds(DurationSeconds)){EasingFunction=newCubicEase{EasingMode=EasingMode.EaseOut}};Storyboard.SetTarget(slide,element);Storyboard.SetTargetProperty(slide,newPropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"));storyboard.Children.Add(fade);storyboard.Children.Add(slide);storyboard.Begin();}privatevoidApplyExitAnimation(FrameworkElementelement){varstoryboard=newStoryboard();varfadeOut=newDoubleAnimation(1,0,TimeSpan.FromSeconds(DurationSeconds*0.7));Storyboard.SetTarget(fadeOut,element);Storyboard.SetTargetProperty(fadeOut,newPropertyPath("Opacity"));storyboard.Children.Add(fadeOut);storyboard.Completed+=(s,e)=>Region.Remove(element);storyboard.Begin();}}

2. 带状态保存的 Region 导航(View 状态保持)

StateAwareRegionBehavior.cs
// MaxWell.CommonBasis/Regions/Behaviors/StateAwareRegionBehavior.csusingPrism.Regions;namespaceMaxWell.CommonBasis.Regions.Behaviors;publicclassStateAwareRegionBehavior:RegionBehaviorBase{privatereadonlyDictionary<object,object>_viewStates=new();protectedoverridevoidOnAttach(){Region.Views.CollectionChanged+=(s,e)=>{if(e.OldItems!=null){foreach(varoldViewine.OldItems){SaveViewState(oldView);}}if(e.NewItems!=null){foreach(varnewViewine.NewItems){RestoreViewState(newView);}}};}privatevoidSaveViewState(objectview){if(viewisFrameworkElementelement&&element.DataContextisIRegionStateAwarestateAware){_viewStates[view]=stateAware.SaveState();}}privatevoidRestoreViewState(objectview){if(viewisFrameworkElementelement&&element.DataContextisIRegionStateAwarestateAware){if(_viewStates.TryGetValue(view,outvarsavedState)){stateAware.RestoreState(savedState);}}}}
IRegionStateAware 接口
// MaxWell.CommonBasis/Regions/IRegionStateAware.cspublicinterfaceIRegionStateAware{objectSaveState();voidRestoreState(objectstate);}

使用示例(在 ViewModel 中实现):

publicclassExperimentViewModel:ViewModelBase,IRegionStateAware{publicdoubleTargetCurrent{get;set;}=5.0;publicboolIsEnabled{get;set;}=true;publicobjectSaveState(){returnnew{TargetCurrent,IsEnabled};}publicvoidRestoreState(objectstate){if(stateisdynamicsaved){TargetCurrent=saved.TargetCurrent;IsEnabled=saved.IsEnabled;}}}

3. 完整权限 + 动画 + 联动集成示例

IntegratedRegionBehavior.cs(终极 Behavior)
// MaxWell.CommonBasis/Regions/Behaviors/IntegratedRegionBehavior.csusingPrism.Regions;usingMaxWell.CommonBasis.Services;publicclassIntegratedRegionBehavior:RegionBehaviorBase{privatereadonlyIModulePermissionService_permissionService;privatereadonlyIUserService_userService;privatereadonlyMultiRegionCoordinator_coordinator;publicIntegratedRegionBehavior(IModulePermissionServicepermissionService,IUserServiceuserService,MultiRegionCoordinatorcoordinator){_permissionService=permissionService;_userService=userService;_coordinator=coordinator;}protectedoverridevoidOnAttach(){Region.Views.CollectionChanged+=(s,e)=>{if(e.NewItems==null)return;foreach(varviewine.NewItems){varviewName=GetViewName(view);// 1. 权限检查if(!_permissionService.CanNavigateToView(viewName,_userService.CurrentUser.Role)){Region.Remove(view);MessageBox.Show($"无权限访问{viewName}","权限拒绝",MessageBoxButton.OK,MessageBoxImage.Warning);return;}// 2. 应用动画if(viewisFrameworkElementelement)ApplyAdvancedAnimation(element);}};}privatestringGetViewName(objectview){returnview.GetType().Name.Replace("View","");}privatevoidApplyAdvancedAnimation(FrameworkElementelement){// 可调用之前 AdvancedTransitionRegionBehavior 中的动画逻辑element.Opacity=0;// ... 动画代码}}
在 App.xaml.cs 中注册
protectedoverridevoidOnInitialized(){base.OnInitialized();varregionManager=Container.Resolve<IRegionManager>();varintegratedBehavior=newIntegratedRegionBehavior(Container.Resolve<IModulePermissionService>(),Container.Resolve<IUserService>(),Container.Resolve<MultiRegionCoordinator>());regionManager.Regions["MainRegion"].Behaviors.Add("IntegratedRegionBehavior",integratedBehavior);}

总结

  • 动画:支持淡入淡出 + 平移
  • 状态保持:通过IRegionStateAware实现 View 状态持久化
  • 权限 + 动画 + 联动:通过IntegratedRegionBehavior统一管理
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 9:26:24

基于Gegenbauer多项式与LSSVR的分布式分数阶微分方程高效求解

1. 项目概述&#xff1a;当机器学习“学会”物理定律在科学计算和工程建模领域&#xff0c;我们常常需要求解描述复杂物理过程的微分方程。传统上&#xff0c;这依赖于有限元、有限差分等数值方法&#xff0c;它们需要精细的网格划分和复杂的迭代计算。然而&#xff0c;有一类方…

作者头像 李华
网站建设 2026/5/24 9:25:44

Rizin逆向工程框架:从静态反汇编到RzIL符号执行的工程实践

1. 这不是又一个IDA替代品&#xff0c;而是你该重新认识二进制分析的起点Rizin不是“另一个逆向工具”&#xff0c;它是我在连续三年用IDA Pro、Ghidra、Radare2做完上百个固件和Windows驱动分析后&#xff0c;主动卸载所有商业软件、只留下终端里一个rizin命令的真实选择。它不…

作者头像 李华
网站建设 2026/5/24 9:25:32

抖音批量下载器:3分钟搞定无损音乐提取,效率提升95%

抖音批量下载器&#xff1a;3分钟搞定无损音乐提取&#xff0c;效率提升95% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…

作者头像 李华
网站建设 2026/5/24 9:24:58

终极指南:使用ncmdumpGUI轻松解密网易云音乐NCM文件

终极指南&#xff1a;使用ncmdumpGUI轻松解密网易云音乐NCM文件 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式文件无法在其他…

作者头像 李华
网站建设 2026/5/24 9:20:12

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool核心技巧

AMD Ryzen硬件调试神器&#xff1a;5分钟掌握SMU Debug Tool核心技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…

作者头像 李华