时间如流水,只能流去不流回!

点赞再看,养成习惯,这是您给我创作的动力!

本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的、自己会的。

阅读导航:

一、先看效果
二、本文背景
三、代码实现
四、文章参考
五、代码下载

一、先看效果

二、本文背景

小编全程是看 Design com WPF 大神视频手敲的仪表控件代码,视频长度19:28,只有背景声音,无国界的视频传播课程,和大神只有代码交流,大家有兴趣,可以到大神YouTube上膜拜,看视频学C# WPF技术我看行。

三、代码实现

整个解决方案结构:

1、站长使用.Net Core 3.1创建的WPF工程,创建的名称为“Gauge”的解决方案。

2、添加一个用户控件,命名为“UserControlGauge.xaml”

下面就是仪表控件的xaml部分,代码不多,总体上就是用两个Border绘制出仪表盘的轮廓,再加一个表针Border、一个数值展示TextBlock,外加一个控制仪表值的Slider,就这么简单做出了仪表控件的一个大致样子:

 1 <UserControl x:Class="Gauge.UserControlGauge"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6 xmlns:local="clr-namespace:Gauge"
7 mc:Ignorable="d"
8 d:DesignHeight="450" d:DesignWidth="800">
9 <Grid>
10 <Slider Minimum="0" Maximum="170" Width="300" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="40" Value="{Binding Path=Value}"/>
11 <Border HorizontalAlignment="Center" VerticalAlignment="Bottom" Height="300" Width="600" BorderBrush="#FFCF5D1D"
12 BorderThickness="2 2 2 0" CornerRadius="300 300 0 0" Background="#FF151515"/>
13 <Border HorizontalAlignment="Center" VerticalAlignment="Bottom" Height="290" Width="580" BorderBrush="#FFCF5D1D"
14 BorderThickness="0 2 0 0" CornerRadius="300 300 0 0">
15 <Border.Effect>
16 <DropShadowEffect Color="#FFFFC7A7" BlurRadius="10" ShadowDepth="2"/>
17 </Border.Effect>
18 </Border>
19 <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="100" FontSize="80"
20 FontFamily="Agency FB" Foreground="#FF95D4FF" Text="{Binding Path=Value,Mode=TwoWay}">
21 <TextBlock.Effect>
22 <DropShadowEffect BlurRadius="20" Color="#FF91DEFB" ShadowDepth="0" />
23 </TextBlock.Effect>
24 </TextBlock>
25 <Border Width="5" CornerRadius="120 120 0 0" Background="#FFFF6901" RenderTransformOrigin="0.5 2" Height="140" Margin="0 0 0 140"
26 VerticalAlignment="Bottom" HorizontalAlignment="Center">
27 <Border.RenderTransform>
28 <TransformGroup>
29 <ScaleTransform/>
30 <SkewTransform/>
31 <RotateTransform Angle="{Binding Path=Angle}"/>
32 <TranslateTransform/>
33 </TransformGroup>
34 </Border.RenderTransform>
35 </Border>
36 </Grid>
37 </UserControl>

3、添加仪表控件ViewModel

仪表控件实际使用场景,可能要在仪表盘上加上显示的刻度值,仪表值会根据业务实时变化等 ,这些都方便添加,读者可以自己扩展,下面的ViewModel只是绑定了仪表控件的指针摆动角度及显示的实际刻度值:

 1 using System.ComponentModel;
2
3 namespace Gauge
4 {
5 public class GaugeViewModel : INotifyPropertyChanged
6 {
7 public event PropertyChangedEventHandler PropertyChanged;
8 private void NotifyPropertyChanged(string info)
9 {
10 if (PropertyChanged != null)
11 {
12 PropertyChanged(this, new PropertyChangedEventArgs(info));
13 }
14 }
15
16 public GaugeViewModel()
17 {
18 Angle = -85;
19 Value = 0;
20 }
21
22 private int _angle;
23 public int Angle
24 {
25 get { return _angle; }
26 private set
27 {
28 if (value != _angle)
29 {
30 _angle = value;
31 NotifyPropertyChanged("Angle");
32 }
33 }
34 }
35
36 private int _value;
37 public int Value
38 {
39 get { return _value; }
40 set
41 {
42 if (value != _value && value >= 0 && value <= 170)
43 {
44 _value = value;
45 Angle = value - 85;
46 NotifyPropertyChanged("Value");
47 }
48 }
49 }
50 }
51 }

4、主窗体MainWindow

xaml部分简单,直接加入仪表控件即可:

 1 <Window x:Class="Gauge.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:Gauge"
7 mc:Ignorable="d"
8 Title="MainWindow" Height="450" Width="800" Background="#FF363636" WindowStyle="None" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
9 <Grid>
10 <local:UserControlGauge/>
11 </Grid>
12 </Window>

后台绑定控件ViewModel

 1 using System.Windows;
2
3 namespace Gauge
4 {
5 /// <summary>
6 /// Interaction logic for MainWindow.xaml
7 /// </summary>
8 public partial class MainWindow : Window
9 {
10 public MainWindow()
11 {
12 this.DataContext = new GaugeViewModel();
13 InitializeComponent();
14 }
15 }
16 }

四、文章参考

建议直接打开大神视频学习,他的YouTube上还有很多代码视频哦,参考:
Design com WPF: https://www.youtube.com/watch?v=KElruOV2EfE&t=930s 。

五、代码下载

文章中代码几乎已经全部贴出,就是这么多。

除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

转载请注明本文地址:https://dotnet9.com/6662.html

欢迎扫描下方二维码关注 Dotnet9 的微信公众号,本站会及时推送最新技术文章(微信公众号“dotnet9_com”):

如有收获,请大力转发,给Dotnet9赞助和支持,谢谢大家对dotnet技术的关注和支持 。

用C# WPF简单实现仪表控件的更多相关文章

  1. WPF简单的分页控件实现

    XAML代码(使用ItemsControl控件实现): <UserControl x:Class="SunCreate.Vipf.Client.UI.CityDoor.PageCont ...

  2. WPF中的image控件的Source赋值

    WPF中的Image控件Source的设置 1.XAML中 简单的方式(Source="haha.png"); image控件的Source设置为相对路径后(Source=&quo ...

  3. WPF Adorner+附加属性 实现控件友好提示

    标题太空泛,直接上图 无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成. 例如WPF自带的控件上要加这样的效 ...

  4. WPF Step By Step 控件介绍

    WPF Step By Step 控件介绍 回顾 上一篇,我们主要讨论了WPF的几个重点的基本知识的介绍,本篇,我们将会简单的介绍几个基本控件的简单用法,本文会举几个项目中的具体的例子,结合这些 例子 ...

  5. WPF中的ControlTemplate(控件模板)(转)

    原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板)     ...

  6. WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件

    在 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) 一文中,我们说到了在 WPF 中引入简单的 UWP 控件以及相关的注意事项 ...

  7. WPF中的ControlTemplate(控件模板)

    原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板)                                             ...

  8. [转]WPF中的ControlTemplate(控件模板)

    WPF中的ControlTemplate(控件模板)                                                                           ...

  9. 在WPF中使用WinForm控件方法

    1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2.      在要使用WinForm控 ...

  10. CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)

    事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...

随机推荐

  1. C++ Qt开发:StringListModel字符串列表映射组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QString ...

  2. MySQL|MySQL事物以及隔离级别

    MySQL 事务主要用于处理操作量大,复杂度高的数据.比如开单,需要添加给订单表增加记录,还需要增加订单的各种相关明细,操作复杂度高,这些操作语句需要构成一个事务.在 MySQL 命令行的默认设置下, ...

  3. 国产Geoscene Server 4.0编译SOE总结

    背景:公司一直使用Arcgis Server 10.1.Visual Studio 2010开发SOE功能,随着国产化软件发展大趋势,SOE中的各种分析功能,需要升级到Geoscene Server环 ...

  4. 在线编辑Word——插入表格

    Word中可插入表格并进行相关格式化操作用于美化表格设计.本文,将通过使用Spire.Cloud Word在线编辑器展示如何来插入格式化的表格到Word.详细步骤见以下内容: 1. 进入在线编辑Wor ...

  5. 全域Serverless+AI,华为云加速大模型应用开发

    日前,华为全联接大会2023在上海召开.华为云CTO张宇昕在大会上发布了基于Serverless技术的大模型应用开发框架,框架以面向AI领域全新升级的FunctionGraph 3.0为核心,将Baa ...

  6. Python图像处理丨带你掌握图像几何变换

    摘要:本篇文章主要讲解图像仿射变换和图像透视变换,通过Python调用OpenCV函数实. 本文分享自华为云社区<[Python图像处理] 十二.图像几何变换之图像仿射变换.图像透视变换和图像校 ...

  7. 华为云GaussDB(for openGauss)推出重磅内核新特性

    摘要:华为云新一代金融级分布式数据库GaussDB(for openGauss)正式推出了Ustore存储引擎.基于Paxos协议的DCF高可用组件等多个重大内核新特性. 数字化时代,技术迭代更新比以 ...

  8. DBA:介里有你没有用过的“CHUAN”新社区版本Redis6.0

    摘要:华为云DCS Redis 6.0社区版带来了极致性能.功能全面.可靠性强.性价比高的云服务,并且完全兼容开源Redis,客户端无需修改代码,开通后即可使用,使企业完全无需后顾之忧就能享受到业务响 ...

  9. 开心档之MySQL 导出数据

    MySQL 导出数据 MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上. 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中 ...

  10. 字节跳动基于 Apache Hudi 的多流拼接实践方案

    字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于 Hudi Payload 的合并机制提出的全新解决方案. 字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于 ...