【Prism】Region 关联页面
MSDN教程,看完后温习一遍,就算是中文懒人包吧。这是个利用ArcGIS Earth API 写的一个 Tool。 如图所示,在NuGet包中下载对应的Prism
MSDN教程,看完后温习一遍,就算是中文懒人包吧。这是个利用ArcGIS Earth API 写的一个 Tool。
一、下载Prism
如图所示,在NuGet包中下载对应的Prism

二、设置Bootstrapper
在Prism框架中,从Bootstraaper启动程序,新建Bootstrapper类
using Prism.Unity;
using Prism.Modularity;
using Prism.Regions;
using StressTestToolPrism.Views;
namespace StressTestToolPrism
{
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return new ShellView();
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Window)this.Shell;
Application.Current.MainWindow.Show();
}
}
}
打开App.cs , 重写OnStartup方法
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace StressTestToolPrism
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
}
}
打开 App.xaml , 删除启动项
<Application x:Class="StressTestToolPrism.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:StressTestToolPrism">
<Application.Resources>
</Application.Resources>
</Application>
这样,程序就从Bootstrapper类启动。
三、在Xaml中划分Region
在ShellView.xaml中划分区域
<Window x:Class="StressTestToolPrism.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://www.codeplex.com/prism"
xmlns:local="clr-namespace:StressTestToolPrism"
mc:Ignorable="d"
Title="ShellView" Height="600" Width="600" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<RowDefinition Height="440"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.ColumnSpan="2">
<UserControl IsTabStop="False" prism:RegionManager.RegionName="ConnectEarthRegion"/>
</Grid>
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<UserControl IsTabStop="False" prism:RegionManager.RegionName="AddDataRegion"/>
</Grid>
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<UserControl IsTabStop="False" prism:RegionManager.RegionName="RunAndExportRegion"/>
</Grid>
</Grid>
</Window>
划分的大小

每个Region的View,这里每个Region有它们对应的View,由于View的代码较多,这里只给出效果图

ConnectToEarth

AddData
RunAndExport

四、注册Region
由于我这个程序较小,不需要很多Module,所以没有新建程序集。直接新建ShellViewModule类,注册Region以及对应的View
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prism.Unity;
using Prism.Modularity;
using Prism.Regions;
using StressTestToolPrism.Views;
namespace StressTestToolPrism
{
class ShellViewModul:IModule
{
// view region register
private readonly IRegionManager regionManager;
public void Initialize()
{
regionManager.RegisterViewWithRegion("ConnectEarthRegion", typeof(ConnectToEarth));
regionManager.RegisterViewWithRegion("AddDataRegion", typeof(AddData));
regionManager.RegisterViewWithRegion("RunAndExportRegion", typeof(RunAndExport));
}
public ShellViewModul(IRegionManager regionManager)
{
this.regionManager = regionManager;
}
}
}
在Bootstrapper中重写ConfigureModuleCatalog方法,添加ShellViewModul
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ShellViewModul));
}
五、效果展示
这样,我们就把每个Region和它们对应的View关联起来了。结果如图所示

2018.02.24