概述

MahApps是一套基于WPF的界面组件,通过该组件,可以使用较小的开发成本实现一个相对很好的界面效果。

官方网站:MahApps.Metro - Home

开源代码:MahApps · GitHub

本文代码基于Stylet开发,如果您还不了解Stylet,请参阅:

WPF优秀组件推荐之Stylet(一) - seabluescn - 博客园 (cnblogs.com)

WPF优秀组件推荐之Stylet(二) - seabluescn - 博客园 (cnblogs.com)

环境需求

通过Nuget引用下列组件。(还需引用Stylet相关组件)

基本操作

修改APP.xaml文件,如下:

<Application x:Class="NiceComponents.Others.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:NiceComponents.Others"
xmlns:s="https://github.com/canton7/Stylet" >
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<s:ApplicationLoader>
<s:ApplicationLoader.Bootstrapper>
<local:Bootstrapper />
</s:ApplicationLoader.Bootstrapper>
</s:ApplicationLoader> <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

修改MainView.Xaml将顶级标记Window修改为:mah:MetroWindow ,如下:

<mah:MetroWindow x:Class="NiceComponents.Others.Pages.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro">
<Grid> </Grid>
</mah:MetroWindow>

修改MainView.Xaml.cs文件,将其父类修改为:MetroWindow,如下:

    public partial class MainView : MetroWindow
{
public MainView()
{
InitializeComponent();
}
}

此时运行程序,就可以看到一个漆黑的窗口,因为还没有设置样式。修改App.xaml.cs文件,如下:

    public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ThemeManager.Current.ChangeTheme(this, "Light.Cyan");
}
}

Light表示背景颜色,支持Light和Dark两种,Cyan为前景色,系统自带的可选颜色请参考官方文档。另外,框架支持用户自定义皮肤,具体方法官方文档讲得也比较详细了。

工具栏

工具栏左侧:

    <mah:MetroWindow.LeftWindowCommands>
<mah:WindowCommands>
<Image Source="/Images/App.png" ToolTip="XXX" Margin="2"/>
</mah:WindowCommands>
</mah:MetroWindow.LeftWindowCommands>

工具栏右侧:

    <mah:MetroWindow.RightWindowCommands>
<mah:WindowCommands>
<Button ToolTip="Setting" Command="{s:Action DoSetting}" ToolTipService.ShowOnDisabled="True">
<Button.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="/Images/Menu.png" Width="20" Height="20" />
</StackPanel>
</DataTemplate>
</Button.ContentTemplate>
</Button>
</mah:WindowCommands>
</mah:MetroWindow.RightWindowCommands>

状态栏

    <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="300"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions> <!--状态栏-->
<StatusBar Grid.Row="1">
<StatusBarItem Content="Ready" Width="188" Margin="10 0 0 0"/>
<StatusBarItem Content="V1.0.0" HorizontalAlignment="Right" Width="120"/>
</StatusBar>
</Grid>

弹窗

Xaml:

    <mah:MetroWindow.Flyouts>
<mah:FlyoutsControl>
<mah:Flyout Header="设置" Position="Left" IsModal="True" Width="450" Theme="Adapt"
IsOpen="{Binding IsSettingFlyoutOpen}" >
<TabControl Style="{DynamicResource MahApps.Styles.TabControl.Animated}"
TabStripPlacement="Left"
mah:TabControlHelper.Underlined="SelectedTabItem" >
<TabItem Header="主题">
</TabItem> <TabItem Header="关于">
<Grid >
</Grid>
</TabItem>
</TabControl>
</mah:Flyout>
</mah:FlyoutsControl>
</mah:MetroWindow.Flyouts>

通过IsSettingFlyoutOpen控制窗口的显示与隐藏,代码如下:

Code:

        public bool IsSettingFlyoutOpen { get; set; }
public void DoSetting()
{
IsSettingFlyoutOpen = !IsSettingFlyoutOpen;
}

常用的功能大致介绍得差不多了,框架对常用控件的样式进行了修改,另外还增加了一些控件,增加的控件不多,常用的有:<mah:NumericUpDown />、<mah:SplitButton />、<mah:ToggleSwitch />等。

具体的使用需要用户进一步去探索了,下载并运行官方开源代码是一个比较好的学习手段。

以上代码下载地址:NiceComponents · Bruce/Learn WPF - 码云 - 开源中国 (gitee.com)

WPF优秀组件推荐之MahApps的更多相关文章

  1. WPF优秀组件推荐之LiveCharts

    概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...

  2. WPF优秀组件推荐之FreeSpire

    概述 Spire是一套可以轻松处理Word.Excel和PDF的商业组件,需要收费,但是他有一套对应的免费组件FreeSpire可以使用,免费组件在功能上有一些限制(比如:excel的sheet数量不 ...

  3. WPF优秀组件推荐之Stylet(一)

    一.简介 Stylet是基于WPF的一款MVVM组件,虽然WPF本身是自带MVVM功能的,但实现起来不是很方便 ,通过Stylet,用户可以用很少的代码就能享受MVVM带来的舒适体验. 目前Style ...

  4. WPF优秀组件推荐之Stylet(二)

    上一篇文章介绍了Stylet的一些基本功能,本篇将介绍一些深入一点的功能. 依赖注入 在Bootstrapper 类中注入需要的对象: public class Bootstrapper : Boot ...

  5. JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

  6. 优秀工具推荐:超实用的 CSS 库,样板和框架

    当启动一个新的项目,使用 CSS 框架或样板,可以帮助您节省大量的时间.在这篇文章中,我编译整理了我最喜欢的 CSS 样板,框架和库,帮助你在建立网站或应用程序时更加高效. 您可能感兴趣的相关文章 精 ...

  7. 【转】JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

  8. HP-Socket国产优秀socket通信组件推荐

    来源:http://blog.csdn.net/clb929/article/details/51085983 * HP-Socket 官方网站:http://www.jessma.org * HP- ...

  9. vue组件推荐

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...

随机推荐

  1. python_f-string格式化字符串文字

    一.简介 f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法. f-string在形式上是以 f 或 F ...

  2. 如何在pyqt中自定义SwitchButton

    前言 网上有很多 SwitchButton 的实现方式,大部分是通过重写 paintEvent() 来实现的,感觉灵活性不是很好.所以希望实现一个可以联合使用 qss 来更换样式的 SwitchBut ...

  3. java基础-抽象类与接口(转)

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类    ...

  4. rm, git rm, git rm --cached 区别与关系

    HEAD, staging area, working copy在上篇<Git命令之回退篇 git revert git reset>已经讲过,不明白请自行传送过去. 1. rm 是仅仅删 ...

  5. iOS中通过链接地址打开指定APP并传参 by徐文棋

    基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...

  6. Shell条件练习题

    Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...

  7. 计算机网络再次整理————tcp周边[八]

    前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. ...

  8. MySQL之视图篇

    MySQL之视图篇 文章目录 MySQL之视图篇 1. 概述 1.1 为什么使用视图? 1.2 视图的理解 2. 创建视图 2.1 创建单表视图 2.2 针对于多表 2.3 基于视图创建视图 3. 查 ...

  9. idea运行Tomcat的servlet程序时报500错误解决方法

    今天在测试使用Tomcat运行servlet小程序时,在传递参数时,出现了如上错误. 开始我以为是配置出了问题,就把项目删除了又建立了一遍,结果亦然. 经过仔细排查,发现问题,先说明问题原因:idea ...

  10. Java 给Word每一页设置不同文字水印效果

    Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以Ja ...