实例介绍
ModernUI(http://mui.codeplex.com/)是一个开源的WPF界面库,利用该界面库,我们可以创建很酷的应用程序。下面是ModernUI官方示例,你可以从官方网站直接下载源码运行,如果是.NET 4.0的话,记得要声明“NET4”预编译变量,否则无法编译通过。 这个界面框架是基于ModernUI来实现的,在该文我将分享所有的源码,并详细描述如何基于ModernUI来构造一个非常通用的、插件化的WPF开发框架。下载源码的同志,希望点击一下推荐。 本文将按照以下四点来介绍: (1)ModernUI简介; (2)构建通用界面框架的思路; (3)基于ModernUI和OSGi.NET的插件化界面框架实现原理及源码分析; (4)其它更有趣的东西~~。 要编写这样的WPF界面,我们需要在一个Window上声明菜单和Tab页面,下图是定义菜单的声明。 此外,每一个Tab风格页面,你也需要手动的为菜单创建这样的界面元素。 直接用这样的方式来使用ModernUI,显然不太适合团队协作性的并行开发,因为在一个团队的协作中,不同的人需要完成不同的功能,实现不同页面,每个人都需要来更改主界面。 我非常希望模块化的开发方法,因为这可以尽可能的复用现有资产,使程序员可以聚焦在自己关注的业务逻辑上,不需要关心UI的使用。下面,我将来描述基于ModernUI实现的一个通用界面框架,这个界面框架允许程序员在自己的业务模块中配置需要显示的界面元素。 通用界面框架实现思路: 我希望能够实现这样的通用界面框架: (1)程序员可以直接实现需要展现业务逻辑的界面,不需要关注如何使用ModernUI; (2)程序员可以通过简单的配置就可以将自己实现的业务逻辑页面显示在主界面中; (3)这个界面框架可以完全复用。 当我看到ModernUI这个界面库时,我希望将应用程序做成模块化,每一个模块能够: (1)通过以下配置能够直接显示二级菜单。 (2)通过以下配置能够直接显示三级菜单。 这样做的好处是,开发插件的时候可以不需要关心界面框架插件;团队在协作开发应用的时候,可以独立开发并不需要修改主界面;团队成员的插件可以随时集成到这个主界面;当主界面无法满足我们的布局时或者用户需求无法满足时,可以直接替换主界面框架而不需要修改任何插件代码。 最终的效果如下,以下界面的几个菜单及点击菜单显示的内容由DemoPlugin插件、DemoPlugin2插件来提供。当插件框架加载更多插件时,界面上会出现更多的菜单;反之,当插件被卸载或者被停止时,则相应的菜单将消失掉。
【实例截图】
【核心代码】
4744300845144802749.zip
└── 1.0
└── FirstFloor.ModernUI
├── Binaries
│ └── Microsoft.Windows.Shell.dll
├── Build
│ ├── Binaries
│ │ ├── MSBuild.Community.Tasks.dll
│ │ ├── NuGet.exe
│ │ └── signvsix.exe
│ ├── Build.bat
│ ├── ModernUI.msbuild
│ └── ModernUI.WPF.nuspec
├── FirstFloor.ModernUI
│ ├── Assets
│ │ ├── Button.xaml
│ │ ├── Calendar.xaml
│ │ ├── CheckBox.xaml
│ │ ├── ComboBox.xaml
│ │ ├── ContextMenu.xaml
│ │ ├── Converters.xaml
│ │ ├── DataGrid.xaml
│ │ ├── DatePicker.xaml
│ │ ├── GridSplitter.xaml
│ │ ├── Hyperlink.xaml
│ │ ├── Label.xaml
│ │ ├── ListBox.xaml
│ │ ├── ListView.xaml
│ │ ├── MenuItem.xaml
│ │ ├── ModernUI.Dark.xaml
│ │ ├── ModernUI.Light.xaml
│ │ ├── ModernUI.xaml
│ │ ├── ModernWindowEx.xaml
│ │ ├── PasswordBox.xaml
│ │ ├── ProgressBar.xaml
│ │ ├── RadioButton.xaml
│ │ ├── ScrollBar.xaml
│ │ ├── Slider.xaml
│ │ ├── TextBlock.xaml
│ │ ├── TextBox.xaml
│ │ ├── ToolTip.xaml
│ │ └── TreeView.xaml
│ ├── FirstFloor.ModernUI.csproj
│ ├── FirstFloor.ModernUI.csproj.vspscc
│ ├── ModernUIHelper.cs
│ ├── Presentation
│ │ ├── AppearanceManager.cs
│ │ ├── CommandBase.cs
│ │ ├── Displayable.cs
│ │ ├── FontSize.cs
│ │ ├── LinkCollection.cs
│ │ ├── Link.cs
│ │ ├── LinkGroupCollection.cs
│ │ ├── LinkGroup.cs
│ │ ├── NotifyPropertyChanged.cs
│ │ ├── ReadOnlyLinkGroupCollection.cs
│ │ └── RelayCommand.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Themes
│ │ ├── BBCodeBlock.xaml
│ │ ├── Generic.xaml
│ │ ├── ModernButton.xaml
│ │ ├── ModernDialog.xaml
│ │ ├── ModernFrame.xaml
│ │ ├── ModernMenu.xaml
│ │ ├── ModernTab.xaml
│ │ ├── ModernWindow.xaml
│ │ └── TransitioningContentControl.xaml
│ └── Windows
│ ├── CommandDictionary.cs
│ ├── Controls
│ │ ├── BBCode
│ │ │ ├── BBCodeLexer.cs
│ │ │ ├── BBCodeParser.cs
│ │ │ ├── CharBuffer.cs
│ │ │ ├── Lexer.cs
│ │ │ ├── ParseException.cs
│ │ │ ├── Parser.cs
│ │ │ ├── TokenBuffer.cs
│ │ │ └── Token.cs
│ │ ├── BBCodeBlock.cs
│ │ ├── DataGridCheckBoxColumn.cs
│ │ ├── DataGridComboBoxColumn.cs
│ │ ├── DataGridTextColumn.cs
│ │ ├── ModernButton.cs
│ │ ├── ModernDialog.cs
│ │ ├── ModernFrame.cs
│ │ ├── ModernMenu.cs
│ │ ├── ModernTab.cs
│ │ ├── ModernWindow.cs
│ │ ├── RelativeAnimatingContentControl.cs
│ │ ├── SourceEventArgs.cs
│ │ ├── TabLayout.cs
│ │ └── TransitioningContentControl.cs
│ ├── Converters
│ │ ├── BooleanToFontWeightConverter.cs
│ │ ├── BooleanToVisibilityConverter.cs
│ │ ├── NullOrEmptyStringToVisibilityConverter.cs
│ │ ├── NullToVisibilityConverter.cs
│ │ ├── ToLowerConverter.cs
│ │ └── ToUpperConverter.cs
│ ├── DefaultContentLoader.cs
│ ├── IContent.cs
│ ├── IContentLoader.cs
│ ├── Media
│ │ └── VisualTreeHelperEx.cs
│ └── Navigation
│ ├── DefaultLinkNavigator.cs
│ ├── FragmentNavigationEventArgs.cs
│ ├── ILinkNavigator.cs
│ ├── NavigatingCancelEventArgs.cs
│ ├── NavigationBaseEventArgs.cs
│ ├── NavigationEventArgs.cs
│ ├── NavigationFailedEventArgs.cs
│ ├── NavigationHelper.cs
│ └── NavigationType.cs
├── FirstFloor.ModernUI.App
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Assets
│ │ ├── appbar.add.xaml
│ │ ├── appbar.adobe.bridge.xaml
│ │ ├── appbar.arrow.collapsed.xaml
│ │ ├── appbar.arrow.corner.up.right.xaml
│ │ ├── appbar.arrow.down.xaml
│ │ ├── appbar.arrow.expand.xaml
│ │ ├── appbar.box.xaml
│ │ ├── appbar.camera.flash.off.xaml
│ │ ├── appbar.camera.flash.xaml
│ │ ├── appbar.camera.xaml
│ │ ├── appbar.cards.club.xaml
│ │ ├── appbar.cards.diamond.xaml
│ │ ├── appbar.cards.heart.xaml
│ │ ├── appbar.cards.spade.xaml
│ │ ├── appbar.check.xaml
│ │ ├── background.kitty.png
│ │ ├── background.love.jpg
│ │ ├── background.snowflakes.jpg
│ │ ├── ModernUI.BingImage.xaml
│ │ ├── ModernUI.HelloKitty.xaml
│ │ ├── ModernUI.Love.xaml
│ │ └── ModernUI.Snowflakes.xaml
│ ├── BingImage.cs
│ ├── Content
│ │ ├── ContentLoaderImages.xaml
│ │ ├── ContentLoaderImages.xaml.cs
│ │ ├── ContentLoaderIntro.xaml
│ │ ├── ContentLoaderIntro.xaml.cs
│ │ ├── ControlsModernBBCodeBlock.xaml
│ │ ├── ControlsModernBBCodeBlock.xaml.cs
│ │ ├── ControlsModernButton.xaml
│ │ ├── ControlsModernButton.xaml.cs
│ │ ├── ControlsModernDialog.xaml
│ │ ├── ControlsModernDialog.xaml.cs
│ │ ├── ControlsModernFrame.xaml
│ │ ├── ControlsModernFrame.xaml.cs
│ │ ├── ControlsModernMenu.xaml
│ │ ├── ControlsModernMenu.xaml.cs
│ │ ├── ControlsModernWindow.xaml
│ │ ├── ControlsModernWindow.xaml.cs
│ │ ├── ControlsStylesButton.xaml
│ │ ├── ControlsStylesButton.xaml.cs
│ │ ├── ControlsStylesDataGrid.xaml
│ │ ├── ControlsStylesDataGrid.xaml.cs
│ │ ├── ControlsStylesDate.xaml
│ │ ├── ControlsStylesDate.xaml.cs
│ │ ├── ControlsStylesItemsControl.xaml
│ │ ├── ControlsStylesItemsControl.xaml.cs
│ │ ├── ControlsStylesProgressBar.xaml
│ │ ├── ControlsStylesProgressBar.xaml.cs
│ │ ├── ControlsStylesSampleForm.xaml
│ │ ├── ControlsStylesSampleForm.xaml.cs
│ │ ├── ControlsStylesSlider.xaml
│ │ ├── ControlsStylesSlider.xaml.cs
│ │ ├── ControlsStylesText.xaml
│ │ ├── ControlsStylesText.xaml.cs
│ │ ├── LoremIpsumList.xaml
│ │ ├── LoremIpsumList.xaml.cs
│ │ ├── LoremIpsumSplit.xaml
│ │ ├── LoremIpsumSplit.xaml.cs
│ │ ├── LoremIpsum.xaml
│ │ ├── LoremIpsum.xaml.cs
│ │ ├── ModernFrame
│ │ │ ├── CancelNavigateSample.xaml
│ │ │ ├── CancelNavigateSample.xaml.cs
│ │ │ ├── ErrorSample.xaml
│ │ │ ├── ErrorSample.xaml.cs
│ │ │ ├── Sample.xaml
│ │ │ └── Sample.xaml.cs
│ │ ├── SettingsAppearanceViewModel.cs
│ │ ├── SettingsAppearance.xaml
│ │ └── SettingsAppearance.xaml.cs
│ ├── FirstFloor.ModernUI.App.csproj
│ ├── FirstFloor.ModernUI.App.csproj.vspscc
│ ├── FlickrImageLoader.cs
│ ├── LoremIpsumLoader.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Pages
│ │ ├── ContentLoader.xaml
│ │ ├── ContentLoader.xaml.cs
│ │ ├── ControlsModern.xaml
│ │ ├── ControlsModern.xaml.cs
│ │ ├── ControlsStyles.xaml
│ │ ├── ControlsStyles.xaml.cs
│ │ ├── Introduction.xaml
│ │ ├── Introduction.xaml.cs
│ │ ├── LayoutBasic.xaml
│ │ ├── LayoutBasic.xaml.cs
│ │ ├── LayoutList.xaml
│ │ ├── LayoutList.xaml.cs
│ │ ├── LayoutSplit.xaml
│ │ ├── LayoutSplit.xaml.cs
│ │ ├── LayoutTab.xaml
│ │ ├── LayoutTab.xaml.cs
│ │ ├── LayoutWireframe.xaml
│ │ ├── LayoutWireframe.xaml.cs
│ │ ├── Navigation.xaml
│ │ ├── Navigation.xaml.cs
│ │ ├── Settings.xaml
│ │ └── Settings.xaml.cs
│ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── SampleDisabledCommand.cs
│ ├── SampleFormViewModel.cs
│ ├── SampleMsgBoxCommand.cs
│ └── SampleParameterCommand.cs
├── FirstFloor.ModernUI.sln
├── FirstFloor.ModernUI.Templates
│ ├── ModernUI.App
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Content
│ │ │ ├── About.xaml
│ │ │ ├── About.xaml.cs
│ │ │ ├── SettingsAppearanceViewModel.cs
│ │ │ ├── SettingsAppearance.xaml
│ │ │ └── SettingsAppearance.xaml.cs
│ │ ├── MainWindow.xaml
│ │ ├── MainWindow.xaml.cs
│ │ ├── ModernUI.App.csproj
│ │ ├── ModernUI.App.csproj.vspscc
│ │ ├── ModernUI.App.ico
│ │ ├── ModernUI.App.vstemplate
│ │ ├── Pages
│ │ │ ├── Home.xaml
│ │ │ ├── Home.xaml.cs
│ │ │ ├── Settings.xaml
│ │ │ └── Settings.xaml.cs
│ │ ├── ProjectTemplate.csproj
│ │ └── Properties
│ │ └── AssemblyInfo.cs
│ ├── ModernUI.BasicPage
│ │ ├── BasicPage.xaml
│ │ ├── BasicPage.xaml.cs
│ │ ├── ModernUI.BasicPage.csproj
│ │ ├── ModernUI.BasicPage.csproj.vspscc
│ │ ├── ModernUI.BasicPage.ico
│ │ ├── ModernUI.BasicPage.vstemplate
│ │ └── Properties
│ │ └── AssemblyInfo.cs
│ ├── ModernUI.ListPage
│ │ ├── ListPage.xaml
│ │ ├── ListPage.xaml.cs
│ │ ├── ModernUI.ListPage.csproj
│ │ ├── ModernUI.ListPage.csproj.vspscc
│ │ ├── ModernUI.ListPage.ico
│ │ ├── ModernUI.ListPage.vstemplate
│ │ └── Properties
│ │ └── AssemblyInfo.cs
│ ├── ModernUI.SplitPage
│ │ ├── ModernUI.SplitPage.csproj
│ │ ├── ModernUI.SplitPage.csproj.vspscc
│ │ ├── ModernUI.SplitPage.ico
│ │ ├── ModernUI.SplitPage.vstemplate
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── SplitPage.xaml
│ │ └── SplitPage.xaml.cs
│ ├── ModernUI.TabPage
│ │ ├── ModernUI.TabPage.csproj
│ │ ├── ModernUI.TabPage.csproj.vspscc
│ │ ├── ModernUI.TabPage.ico
│ │ ├── ModernUI.TabPage.vstemplate
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── TabPage.xaml
│ │ └── TabPage.xaml.cs
│ ├── ModernUI.Templates
│ │ ├── License.txt
│ │ ├── ModernUI.icon.png
│ │ ├── ModernUI.preview.png
│ │ ├── ModernUI.Templates.csproj
│ │ ├── ModernUI.Templates.csproj.vspscc
│ │ ├── Packages
│ │ │ └── ModernUI.WPF.1.0.5.nupkg
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── source.extension.vsixmanifest
│ ├── ModernUI.Templates.sln
│ ├── ModernUI.Templates.vssscc
│ └── ModernUI.Theme
│ ├── ModernUI.Theme.csproj
│ ├── ModernUI.Theme.csproj.vspscc
│ ├── ModernUI.Theme.ico
│ ├── ModernUI.Theme.vstemplate
│ ├── ModernUI.Theme.xaml
│ └── Properties
│ └── AssemblyInfo.cs
├── FirstFloor.ModernUI.vssscc
├── FirstFloor.ModernUI.WPF4
│ ├── Assets
│ │ └── ModernWindowEx.xaml
│ ├── FirstFloor.ModernUI.WPF4.csproj
│ ├── FirstFloor.ModernUI.WPF4.csproj.vspscc
│ └── Themes
│ ├── ModernDialog.xaml
│ └── ModernWindow.xaml
├── License.icons.txt
├── License.RelativeAnimatingContentControl.txt
├── License.txt
└── ReadMe.txt
43 directories, 287 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论