Welcome 微信登录

首页 / 网页编程 / ASP.NET / Prism V2之旅(3)

Prism V2之旅(3)2011-12-13 博客园 Clingingboy上篇介绍了Region的基本应用,这篇接上篇,继续介绍关于Region的相关应用—RegionAdapter

1.预先实现映射关系RegionAdapterMappings

RegionAdapterMappings对Control和RegionAdapter做了一个映射,这个映射是在Bootstrapper引导程序中完成的.

    protected virtual RegionAdapterMappings ConfigureRegionAdapterMappings()    {      RegionAdapterMappings regionAdapterMappings = Container.TryResolve<RegionAdapterMappings>();      if (regionAdapterMappings != null)      {        regionAdapterMappings.RegisterMapping(typeof(Selector), this.Container.Resolve<SelectorRegionAdapter>());        regionAdapterMappings.RegisterMapping(typeof(ItemsControl), this.Container.Resolve<ItemsControlRegionAdapter>());        regionAdapterMappings.RegisterMapping(typeof(ContentControl), this.Container.Resolve<ContentControlRegionAdapter>());      }      return regionAdapterMappings;    }
这里提供了三种控件支持,在上篇也有交代.RegionAdapter必须实现IRegionAdapter接口

2.在注册Region时寻找RegionAdapter

<StackPanel cal:RegionManager.RegionName="MainRegion"/>
以上的定义是错误的,因为在RegionAdapterMappings无法找到StackPanel和RegionAdapter的映射关系.以上附加属性的设置会尝试执行以下代码

protected virtual IRegion CreateRegion(DependencyObject targetElement, string regionName){  // Build the region  IRegionAdapter regionAdapter = this.regionAdapterMappings.GetMapping(targetElement.GetType());  IRegion region = regionAdapter.Initialize(targetElement, regionName);  return region;}
为了支持StackPanel,我们可以尝试为StackPanel定义一个实现IRegionAdapter的区域适配器.