定義Region (RegionManager)
定義Region 的方式有兩種,一個是在XMAL界面指定,另一種這是代碼當中指定。
RegionManager.RegionName(XMAL)
RegionManager.SetRegionName (Code)
RegionManager 除了定義區域,還有一下功能:
維護區域集合
提供對區域的訪問
合成視圖
區域導航
定義區域
-----------------------------------------------------------------------------------
xml 文件
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
C# code
public MainWindow(IRegionManager regionManager)
{
InitializeComponent();
_regionManager = regionManager;
_regionManager.RegisterViewWithRegion("MainStack", typeof(Login));
this.Loaded += MainWindow_Loaded; this.Loaded += MainWindow_Loaded;
}
---------------------
自定義adapter
public class StackPanelAdapter : RegionAdapterBase<StackPanel>
{
protected StackPanelAdapter(IRegionBehaviorFactory regionBehaviorFactory):base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, StackPanel regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if(e.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach( FrameworkElement item in e.NewItems)
{
regionTarget.Children.Add(item);
}
}
};
}
protected override IRegion CreateRegion()
{
return new Region();
}
}
app code 注冊Adaptor
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// containerRegistry.RegisterForNavigation<Login>();
//containerRegistry.RegisterForNavigation<CreateAccount>();
}
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
{
base.ConfigureRegionAdapterMappings(AdapterMappings);
AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
}
}
-----------------------------------------
頁面的跳轉
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<PageA>();
containerRegistry.RegisterForNavigation<PageB>();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
_regionManager.RequestNavigate("MainRegion", "PageA");
}
module 的使用
public class MainModuleModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
var _RegionManager=containerProvider.Resolve<IRegionManager>();
var region= _RegionManager.Regions["MainRegion"];
region.RequestNavigate("ViewA");
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ViewA>();
}
}
--------------------------------------------------------------------------------------------
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<PageA>();
containerRegistry.RegisterForNavigation<PageB>();
}
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
{
base.ConfigureRegionAdapterMappings(AdapterMappings);
AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog(); //目錄創建於配置文件
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<MainModule.MainModuleModule>();
}
}