Prism&MEF构建开发框架 (一)

Shell框架XECA

shell.xaml主要起到是一个容器或壳的作用

<Window x:Class="XECA.Shell"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       
        xmlns:inf="clr-namespace:MyGlobal.Infrustructure;assembly=MyGlobal.Infrustructure"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:Controls="clr-namespace:MyGlobal.Infrustructure.Controls;assembly=MyGlobal.Infrustructure"
        Title="工作平台" Height="300" Width="300" Background="{StaticResource myGraybrush}">
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Border Margin="5" Grid.Row="1" CornerRadius="5,5,5,5" BorderBrush="Black" BorderThickness="1">
            <Grid  Width="auto" Margin="5">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.15*"></ColumnDefinition>
                    <ColumnDefinition Width="0.85*"></ColumnDefinition>
                </Grid.ColumnDefinitions>

<!--<Controls:RoundedBox Margin="10" />-->
                <Border Grid.Column="0" CornerRadius="10"  Background="{StaticResource myGraybrush}" BorderBrush="#193441" BorderThickness="1" Margin="3" Padding="1">
                    <ItemsControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.MenuRegion }"/>
                </Border>

<Border Grid.Column="1" CornerRadius="10" Background="#FCFFf5" BorderBrush="#193441" BorderThickness="0" Margin="1" Padding="0">
                    <Grid x:Name="ContentGrid"   Grid.Row="1" RenderTransformOrigin="0.5,0.5">
                        <Grid.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </Grid.RenderTransform>
                        <Border BorderThickness="1" Width="auto" Height="auto" CornerRadius="10,10,10,10" BorderBrush="Black" >
                            <Controls:AnimatedTabControl
                                        x:Name="TabName"
                                        SelectedIndex="0" 
                                        VerticalAlignment="Stretch"
                                        ItemContainerStyle="{StaticResource ShellTabItemStyle}"
                                        Background="{StaticResource headerBarBG}"
                                        prism:RegionManager.RegionName="{x:Static inf:RegionNames.MCWrapRegion}"
                                        AutomationProperties.AutomationId="TabId" />
                        </Border>
                    </Grid>
                </Border>

</Grid>

</Border>
        <StackPanel Orientation="Horizontal">
            <Label HorizontalAlignment="Left" Margin="10,0,0,0" Width="Auto" Content="U-Project" FontWeight="Bold" Foreground="#fff" FontSize="24" FontFamily="Corbel"/>
          
        </StackPanel>
    </Grid>

</Window>

这里涉及两个关键技术点,一个是style的全局共享,另一个是采用AnimatedTabControl控件

App.config删除起始访问设置

<Application x:Class="XECA.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:XECA">  
</Application>

Bootstrap.cs代码

using Prism.Unity;
using System.Windows;
using Microsoft.Practices.Unity;
using Prism.Modularity;
 
using XECA.Views;
using Prism.Mef;
using System.ComponentModel.Composition.Hosting;
using MyGlobal.Infrustructure.Behaviors;
using System;
using MyGlobal.Infrustructure;
using Prism.Logging;
using EntityFW;
using TestTabItems;

namespace XECA
{
     [CLSCompliant(false)]
    public partial class Bootstrapper : MefBootstrapper//采用MefBootstrapper
    {

//程序运行日志管理
        private readonly EnterpriseLibraryLoggerAdapter _logger = new EnterpriseLibraryLoggerAdapter();

protected override ILoggerFacade CreateLogger()
        {
            return _logger;
        }
        protected override void ConfigureAggregateCatalog()
        {
            base.ConfigureAggregateCatalog();
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly));
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(RICommands).Assembly));
           
           
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(EntityFWModule).Assembly));
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(TabTestModule).Assembly));
            //业务模块采用目录catlog加载方式,即后续业务模块开发完成,将DLL扔到目录下即可

this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("../../Modules"));
        }

protected override void ConfigureContainer()
        {
            base.ConfigureContainer();
        }

protected override void InitializeShell()
        {
            base.InitializeShell();

Application.Current.MainWindow = (Window)this.Shell;
            Application.Current.MainWindow.Show();
        }

protected override Prism.Regions.IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()
        {
            var factory = base.ConfigureDefaultRegionBehaviors();

factory.AddIfMissing("AutoPopulateExportedViewsBehavior", typeof(AutoPopulateExportedViewsBehavior));

return factory;
        }

protected override DependencyObject CreateShell()
        {
            DependencyObject x= this.Container.GetExportedValue<Shell>();
            return x;
        }
    }
}

时间: 2024-08-01 02:41:49

Prism&MEF构建开发框架 (一)的相关文章

Prism&amp;MEF构建开发框架 (三)

菜单管控模块EntityFW 菜单的加载采用MEF技术,程序实现思路: 1 .主菜单加载页面MainMenuView.xaml指向MenuRegion 2. 菜单Item点击及内容加载,采用订阅模式,即菜单item点击时发布消息,shell负责订阅并过滤加载子模块 MainMenuView.xaml <UserControl x:Class="EntityFW.Views.MainMenuView"       xmlns="http://schemas.microso

Prism&amp;MEF构建开发框架

系统框架构想效果图 平台简单由左侧菜单和右侧内容区以及顶部系统和用户信息区构成 菜单根据系统模块动态加载 右侧,根据左侧选中菜单动态加载子模块,子模块集合以tab选项卡方式布局 系统模块划分为Shell框架XECA.基础模块MyGlobal.Infrastructre.业务模块.数据提供模块DAL.服务提供模块.数据访问控制DCA..

【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)

编译并运行快速入门 需要在VisualStudio 2010上运行此快速入门示例 代码下载:ModularityWithMef.zip 先重新生成解决方案 再按F5运行此示例 说明: 在此快速入门示例解决方案的 ModularityWithMef.Desktop程序集中 加入了生成成功时的“后期生成事件命令行” IF NOT EXIST "$(TargetDir)\DirectoryModules" mkdir "$(TargetDir)\DirectoryModules&q

【MEF】构建一个WPF版的ERP系统

引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合适的.下面简单演示如何构建一个简单版的ERP系统. 简单分析 从框架的角度来看,一个好的ERP系统应该至少具备以下两个特点: 1.模块开发.一个大型ERP系统要靠团队开发的,每个人负责的模块可能都不一样,要保证低耦合和开发进度,每个模块必须要能够独立开发测试,最终才组合起来. 2.实时更新.ERP系统的模块经常会有功能性修改,升级频繁,要保证良

Prism4 文档翻译系列---第2章:初始化Prism应用程序

这一章节介绍Prism应用程序启动和运行时发生的内容.Prism应用程序在启动时需要有注册和配置的过程,这就是所谓的自自启动程序. 什么是自启动引导程序?     引导程序是一个类,它负责使用Prism库构建的应用程序的初始化.通过使用引导程序,你有更多的控制权使得Prism库组件如何连接到你的应用程序. Prism库包括可被专门用于与任何容器使用一个默认的抽象的引导程序基类.许多在引导程序类的方法都是虚方法.您可以在自己的自定义引导程序中覆盖这些方法. 在自启动过程的基本阶段 Prism库提供

MEF——.NET中值得体验的精妙设计

MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的.MEF的目标是简化创建可扩展的应用程序,其核心类是ComposablePart,即具有组合能力的组件,每一个称为ComposablePart(中文可为可组合构件,不过下文一直采用英文来表示,这样比较贴切)的组件可以组合(称为Import)其它组件的功能(其它组件通过声明Export提

MEF——.NET中值得体验的精妙设计(转)

MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的.MEF的目标是简化创建可扩展的应用程序,其核心类是ComposablePart,即具有组合能力的组件,每一个称为ComposablePart(中文可为可组合构件,不过下文一直采用英文来表示,这样比较贴切)的组件可以组合(称为Import)其它组件的功能(其它组件通过声明Export提

Core 3 WPF MVVM框架 Prism系列之数据绑定

一.安装Prism 1.使用程序包管理控制台# Install-Package Prism.Unity -Version 7.2.0.1367 也可以去掉‘-Version 7.2.0.1367’获取最新的版本 2.使用管理解决方案的Nuget包# 在上面或许我们有个疑问?为啥安装prism会跟Prism.Unity有关系,我们知道Unity是个IOC容器,而Prism本身就支持IOC,且目前官方支持几种IOC容器: 1.且unity由于是微软官方的,且支持prism的组件化,由此我推荐使用pr

.NET中值得体验的精妙设计

转自: http://developer.51cto.com/art/201104/255455_all.htm .NET 是 Microsoft XML Web services 平台.MEF是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的.下面让我们一起来看. MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual S