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

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

本文 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. 【scikit-learn基础】--『预处理』之 分类编码

    数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...

  2. URL路径参数转换器

    作用和基本使用 作用: 用于校验请求的路由参数中的值是否符合符合指定的规则. 这个使用方法和django中的路由参数转换器是差不多的. 至于为什么用路径参数转换器,原因和django中的一样,虽然你可 ...

  3. 华企盾DSC在苹果电脑上申请审批没有通知

    由于系统通知这里没有允许DSC通知,开启后即可.系统偏好设置-通知与专注模式-通知 ​

  4. 【Python】【OpenCV】轮廓检测

    Code: 1 import cv2 2 import numpy as np 3 4 img = np.zeros((200, 200), dtype=np.uint8) 5 img[50:150, ...

  5. 【C#】【WinForm】MDI窗体

    MDI窗体的相关学习使用 1.设置MDI父窗体 在属性中找到IsMdiContainer选项,设置为True 2.添加MDI子窗体,在项目中依次选择添加->窗体,然后一直默认即可 添加后的项目目 ...

  6. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-36-处理web页面定位toast-下篇

    1.简介 按理说,现在这种一闪而过的toast的已经相当普及或者是见怪不怪了,应该网上的大网站会用到的,偶然的在一次租房中,看到了这种场景,所以宏哥决定将其拿来主义,进行演示实践一下. 2.租房网站 ...

  7. 三个月我迁移了100PB数据

    2023年马上结束,这一年做了不少事情,有一项我可以吹好几年,忍不住和大家分享一下啊. 需求 去年底收到一项需求,要求2个月内从某云存储迁移100PB数据到微软云存储,包含几百亿个文件.当时听到这个数 ...

  8. 解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

    已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~ 反思来源于对RAG下 ...

  9. 基于LiteOS Studio零成本学习LiteOS物联网操作系统

    摘要:大家在学习物联网操作系统开发的时候,都不得不准备一套开发板和仿真器,也是一笔不小的投资.LiteOS社区现在对外开放了对Qemu模拟器的适配工程,在不使用开发板的情况下,也可以搭建LiteOS开 ...

  10. Python图像处理丨如何调用OpenCV绘制直方图

    摘要:本篇文章主要讲解灰度直方图的基本概念,Python调用OpenCV实现绘制图像直方图. 本文分享自华为云社区<[Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图> ...