Region-区域(默认和新增)适配器
Prism内置了几个区域适配器
ContentControlRegionAdapter
ItemsControlRegionAdapter
SelectorRegionAdapter
-
ComboBox
-
ListBox
-
Ribbon
-
TabControl
所以我们可以在ContentControl当中定义区域,
实际可以在任何元素上定义区域
如果定义的范围不再官方提供的默认适配器当中,则会引发异常。
自定义StackPanel区域适配器
一:新建一个类:StackPanelRegionAdapter
1 namespace BlankApp1.Views.StackPanel_Prism 2 { 3 //1、继承类;RegionAdapterBase<> 4 public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel> 5 { 6 //2、生成构造函数 7 public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory) 8 { 9 } 10 //3、生成实现抽像类 11 protected override void Adapt(IRegion region, StackPanel regionTarget) 12 { 13 //代码意思 14 //动态设置他内容的一个代码区域 15 //1、检测这个区域的视图动态变化 16 region.Views.CollectionChanged += (s, e) => 17 { 18 //判断他现在的行为是增加还是删除 19 //如果是增加行为 20 if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 21 { 22 //循环他的数组,获取所有控件 23 foreach (FrameworkElement item in e.NewItems) 24 { 25 regionTarget.Children.Add(item); 26 } 27 28 } 29 30 }; 31 } 32 33 protected override IRegion CreateRegion() 34 { 35 //代码意思 36 //创建一个名为CreateRegionr的Region区域 37 //直接返回一个新的Region区域就可以了 38 return new Region(); 39 40 } 41 } 42 }
二:View代码中的MainWindows代码
1 public MainWindow(IRegionManager regionManager) 2 { 3 InitializeComponent(); 4 5 //显示一个或循环显示多个 6 for (int a = 0; a < 10; a++) 7 { 8 regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewB)); 9 } 10 11 RegionManager.SetRegionName(Ctr, "ContentRegion"); 12 13 }
三、App.xaml.cs
//4、初始化
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
{
base.ConfigureRegionAdapterMappings(regionAdapterMappings);
regionAdapterMappings.RegisterMapping(typeof(StackPanel), Container.Resolve<StackPanelRegionAdapter>());
}
protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } //4、初始化 protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings) { base.ConfigureRegionAdapterMappings(regionAdapterMappings); regionAdapterMappings.RegisterMapping(typeof(StackPanel), Container.Resolve<StackPanelRegionAdapter>()); }
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?