WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)

简介: WPF有很多开源免费的UI库,本文主要介绍常见的MahApps、HandyControl两个UI库;在开发过程中经常会涉及到图表的开发,本文主要介绍LiveCharts开源图表库。

WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)

WPF有很多开源免费的UI库,本文主要介绍常见的MahApps、HandyControl两个UI库;在开发过程中经常会涉及到图表的开发,本文主要介绍LiveCharts开源图表库。

UI库

第三方UI库的使用一般都是三步:

  1. Nuget安装
  2. 在APP.xaml中增加资源

<Application.Resources>

   <ResourceDictionary>

       <ResourceDictionary.MergedDictionaries>

           <ResourceDictionarySource="..........xaml"/>

       </ResourceDictionary.MergedDictionaries>

   </ResourceDictionary>

</Application.Resources>

  1. 在MainWindow.xaml中引用命名空间xmlns:xxxx="xxxxxxx"

MahApps

MahApps.Metro官方网站

  1. Nuget安装MahApps.Metro
  2. App.xaml中增加

<ResourceDictionary.MergedDictionaries>

   <ResourceDictionarySource="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml"/>

   <ResourceDictionarySource="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml"/>

   <ResourceDictionarySource="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml"/>

</ResourceDictionary.MergedDictionaries>

  1. 在MainWindow.xaml中引用命名空间xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"

该UI库不仅扩展了很多扩展控件,还对原生的控件进行了美化。看一个简单案例

<mah:MetroWindowx:Class="Zhaoxi.MahAppsApp.MainWindow"

       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:local="clr-namespace:Zhaoxi.MahAppsApp"

       xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"

       mc:Ignorable="d"FontSize="20"WindowStartupLocation="CenterScreen"

       Title="MainWindow"Height="450"Width="800">

   <mah:MetroWindow.LeftWindowCommands>

       <mah:WindowCommands>

           <ButtonContent="A"/>

       </mah:WindowCommands>

   </mah:MetroWindow.LeftWindowCommands>

   <mah:MetroWindow.RightWindowCommands>

       <mah:WindowCommands>

           <ButtonContent="B"/>

           <ButtonContent="C"/>

           <ButtonContent="D"/>

           <ButtonContent="E"/>

       </mah:WindowCommands>

   </mah:MetroWindow.RightWindowCommands>

   <Grid>

       <StackPanel>

           <ButtonContent="Button"Width="200"Height="30"Style="{StaticResource MahApps.Styles.Button.Hamburger}"/>

           <TextBoxText="Hello"Width="200"/>

           <TabControl>

               <TabItemHeader="AAA"/>

               <TabItemHeader="BBB"/>

               <TabItemHeader="CCCC"/>

               <TabItemHeader="DDDD"/>

           </TabControl>

           <mah:MetroTabControl>

               <mah:MetroTabItemHeader="AAA"CloseButtonEnabled="True"/>

               <mah:MetroTabItemHeader="AAA"CloseButtonEnabled="True"/>

               <mah:MetroTabItemHeader="AAA"/>

               <mah:MetroTabItemHeader="AAA"/>

               <mah:MetroTabItemHeader="AAA"/>

           </mah:MetroTabControl>

         

           <mah:FlipViewBannerText="Hello"IsBannerEnabled="False">

               <mah:FlipViewItemHeight="100"Width="300">

                   <BorderBackground="Orange"/>

               </mah:FlipViewItem>

               <mah:FlipViewItemHeight="100"Width="300">

                   <BorderBackground="Green"/>

               </mah:FlipViewItem>

           </mah:FlipView>

           

       </StackPanel>

   </Grid>

</mah:MetroWindow>

因为涉及到了窗体,所以在后台类中需要继承MetroWindow

HandyControl

使用方法类似,Nuget安装HandyControl

App.xaml中引入

<Application.Resources>

   <ResourceDictionary>

       <ResourceDictionary.MergedDictionaries>

           <ResourceDictionarySource="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>

           <ResourceDictionarySource="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>

       </ResourceDictionary.MergedDictionaries>

   </ResourceDictionary>

</Application.Resources>

HandyOrg中文官方文档

官方网站上详细介绍了各控件的使用方法和控件的展示效果,并且网站是中文的十分友好,详细使用说明直接查看官网即可。

图表库

Nuget包安装LiveCharts.Wpf

引入命名空间xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"

<Grid>

   <lvc:CartesianChartDisableAnimations="False"Zoom="Xy">

       <lvc:CartesianChart.Series>

           <lvc:LineSeriesScalesYAt="1"Values="{Binding Values}"/>

           <lvc:ColumnSeriesValues="{Binding Values2}"/>

       </lvc:CartesianChart.Series>

       <lvc:CartesianChart.AxisX>

           <lvc:Axis

               Title="时间"

               Labels="{Binding xLabels}"

               LabelsRotation="-45">

               <lvc:Axis.Separator>

                   <lvc:SeparatorStep="1"/>

               </lvc:Axis.Separator>

           </lvc:Axis>

       </lvc:CartesianChart.AxisX>

       <lvc:CartesianChart.AxisY>

           <lvc:Axis

               Title="温度"

               MaxValue="100"

               MinValue="0">

               <lvc:Axis.Separator>

                   <lvc:SeparatorStep="10"/>

               </lvc:Axis.Separator>

           </lvc:Axis>

           <lvc:Axis

               Title="压力"

               MaxValue="100"

               MinValue="0"

               Position="RightTop">

               <lvc:Axis.Separator>

                   <lvc:SeparatorStep="10"/>

               </lvc:Axis.Separator>

           </lvc:Axis>

       </lvc:CartesianChart.AxisY>

   </lvc:CartesianChart>

</Grid>

ModelView

publicclassMainViewModel

{

   publicChartValues<double>Values { get; set; }

   publicChartValues<double>Values2 { get; set; }

   publicObservableCollection<string>xLabels { get; set; }

   publicMainViewModel()

   {

       Values=newChartValues<double>();

       Values2=newChartValues<double>();

       xLabels=newObservableCollection<string>();

       Randomrandom=newRandom();

       Task.Factory.StartNew(async () =>

       {

           while (true)

           {

               awaitTask.Delay(1000);

               Values.Add(random.Next(10, 80));

               Values2.Add(random.Next(10,90));

               xLabels.Add(DateTime.Now.ToString("mm:ss"));

               if (Values.Count>50)

               {

                   Values.RemoveAt(0);

                   Values2.RemoveAt(0);

                   xLabels.RemoveAt(0);

               }

           }

       });

   }

}

更多使用方法见官方网站

LiveCharts满足基本的需求,但是如果数据量较大的话,性能会大打折扣,如果追求性能可以使用下ScottPlot开源库,但是该库某些功能没有实现。如果对性能有较高的要求,也可以使用LightningChart.NET,不过这是收费的组件库。


相关文章
|
1月前
|
人工智能 API Apache
推荐3款开源、美观且免费的WinForm UI控件库
推荐3款开源、美观且免费的WinForm UI控件库
201 6
|
1月前
|
API C# 开发者
基于Material Design风格开源、免费的WinForms UI控件库
基于Material Design风格开源、免费的WinForms UI控件库!
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
本文介绍了在C# WPF应用程序中引入外部iconfont图标时可能遇到的显示问题及其解决方法:1) 检查资源路径和引入格式是否正确,确保字体文件引用格式为“#xxxx”,并正确指向字体文件位置;2) 确保图标资源被包含在程序集中,通过设置字体文件的生成操作为Resource(资源)来实现。
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
|
2月前
|
Linux C# Android开发
分享3款开源、免费的Avalonia UI控件库
分享3款开源、免费的Avalonia UI控件库
261 0
|
3月前
|
搜索推荐 前端开发 C#
推荐7款美观且功能强大的WPF UI库
推荐7款美观且功能强大的WPF UI库
162 2
|
4月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
56 0
|
4月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
90 0
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
249 0
|
4月前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
58 0
|
4月前
|
开发者 C# 存储
WPF开发者必读:样式与模板的艺术,轻松定制UI外观,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,样式与模板是实现美观界面与一致性的关键工具。样式定义了控件如字体、颜色等属性,而模板则允许自定义控件布局与子控件,两者均可存储于`.xaml`文件中。本文介绍了样式与模板的基础知识,通过示例展示了如何创建并应用它们来改变按钮的外观,从而提升用户体验。
109 0