以下是针对 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{privateconstdoubleDurationSeconds0.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.Opacity0;element.RenderTransformnewTranslateTransform{X30};varstoryboardnewStoryboard();// 淡入varfadenewDoubleAnimation(0,1,TimeSpan.FromSeconds(DurationSeconds)){EasingFunctionnewCubicEase{EasingModeEasingMode.EaseOut}};Storyboard.SetTarget(fade,element);Storyboard.SetTargetProperty(fade,newPropertyPath(Opacity));// 右滑进入varslidenewDoubleAnimation(30,0,TimeSpan.FromSeconds(DurationSeconds)){EasingFunctionnewCubicEase{EasingModeEasingMode.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){varstoryboardnewStoryboard();varfadeOutnewDoubleAnimation(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{privatereadonlyDictionaryobject,object_viewStatesnew();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(viewisFrameworkElementelementelement.DataContextisIRegionStateAwarestateAware){_viewStates[view]stateAware.SaveState();}}privatevoidRestoreViewState(objectview){if(viewisFrameworkElementelementelement.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){TargetCurrentsaved.TargetCurrent;IsEnabledsaved.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){_permissionServicepermissionService;_userServiceuserService;_coordinatorcoordinator;}protectedoverridevoidOnAttach(){Region.Views.CollectionChanged(s,e){if(e.NewItemsnull)return;foreach(varviewine.NewItems){varviewNameGetViewName(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.Opacity0;// ... 动画代码}}在 App.xaml.cs 中注册protectedoverridevoidOnInitialized(){base.OnInitialized();varregionManagerContainer.ResolveIRegionManager();varintegratedBehaviornewIntegratedRegionBehavior(Container.ResolveIModulePermissionService(),Container.ResolveIUserService(),Container.ResolveMultiRegionCoordinator());regionManager.Regions[MainRegion].Behaviors.Add(IntegratedRegionBehavior,integratedBehavior);}总结动画支持淡入淡出 平移状态保持通过IRegionStateAware实现 View 状态持久化权限 动画 联动通过IntegratedRegionBehavior统一管理