- 博客(101)
- 资源 (7)
- 收藏
- 关注
原创 C# vector CAN 开发
XL_GetDriverConfig(ref driverConfig)获取的driverConfig里面的channels可以查询到所有可用的通道信息。其中xl_channel_config里面的channelMask存储的值是否为后续XL_OpenPort中的accessMask?hwChannel appName对应的通道的索引 (HW Channel)通过测试对比,发现,Vector存在自发CAN帧的回收现象。完成后,可以在大致路径下找到相关的测试DEMO。检查发现,CAN帧的标志如下。
2025-10-07 17:26:00
721
原创 C# ASC 文件格式分析
ID 使用32为进行转换 然后使用空格代替前面为0的字符区域FD 如果是CANFD数据 值为** CANFD** 否则为空x 如果存在 值为**x**否则为空r 如果存在 值为**r**否则为**d** CAN特有SymbolicName 如果CANFD 保留区域 32位字符BRS 如果CANFD 保留区域 1位字符 否则区域为空ESI 如果CANFD 保留区域 1位字符 否则区域为空DLC 正常编码0~f 1位字符。
2025-10-07 17:23:02
206
原创 C# BLF 文件格式分析
BLF文件格式分析摘要 BLF文件是Vector Informatik GmbH开发的CANoe/CANalyzer日志文件格式,用于记录CAN总线事件和其他数据对象。该格式通过binlog.dll/libbinlog.so库进行读写操作。文件头定义了对象签名BL_OBJ_SIGNATURE(0x4A424F4C)和多种对象类型,包括: CAN相关:消息(1)、错误帧(2)、过载帧(3)、统计(4)、驱动错误(31) LIN相关:消息(11)、CRC错误(12)、唤醒事件(21)等 MOST相关:Spy消息
2025-10-07 17:21:45
1212
原创 C# 基于DI和JSON序列化的界面配置参数方案
本文提出了一种基于DI和JSON序列化的WPF界面参数配置方案,使用Microsoft.Extensions.DependencyInjection和Newtonsoft.Json实现ViewModel参数的保存与加载。方案通过DI容器管理ViewModel实例,利用JSON进行序列化存储,通过[JsonIgnore]特性标记无需保存的属性,并处理了ObservableProperty属性的特殊标注需求。加载时先反序列化JSON文件,再通过反射将值赋给DI容器中的运行实例。文章还解决了构造函数初始化与反序列
2025-10-07 17:18:59
778
原创 C#单元测试(xUnit + Moq + coverlet.collector)
这篇文档介绍了如何使用C#进行单元测试的完整流程。主要包含以下内容: 创建数学类库项目MlyMathLib,其中定义了IUserRepo接口和UserService类 添加xUnit测试项目MlyMathLibTests,并引用Moq和coverlet.collector库 编写测试用例,使用Moq模拟IUserRepo接口,测试UserService的Greet方法 运行测试后,通过命令行生成代码覆盖率报告: 使用dotnet test收集覆盖率数据 安装ReportGenerator工具 将XML报告转
2025-08-16 19:25:31
466
原创 拒绝造轮子(C#篇)使用SqlSugar实现数据库的访问
本文介绍了如何使用SqlSugar框架简化C#数据库操作。SqlSugar是一个支持多种数据库(包括MySQL、SQL Server等30余种)的ORM框架,通过LINQ语法糖实现高效数据访问。文章详细展示了如何建立数据库连接、创建数据表(以Student表为例),并提供了完整的增删改查示例代码。通过SqlSugarHelper类封装数据库连接,结合StudentService类实现业务逻辑,开发者可以快速完成数据库操作而无需编写底层SQL。该框架支持自动关闭连接、实体类映射等特性,大幅提升了开发效率和代码
2025-08-16 19:19:48
1359
原创 WPF 子窗口跟随主窗口移动
由于LocationChanged的事件参数中没有记录历史的窗口位置信息,因此为了得到当前窗口与移动之前的窗口位置变化情况,需要添加lastTop和lastLeft记录上一次窗口位置情况,然后以此来计算偏差时。
2025-03-10 09:52:10
390
原创 WPF TextBox 添加范围验证
添加范围验证,若出现范围错误添加信息捕捉使用到技术:使用**ValidationRules**实现范围验证,当范围出现错误时,可以通过触发器**Validation.HasError=True**设置自定义错误样式。使用Behavior技术捕捉所有验证出错的消息,用于检查界面是否出错,实现行为捕获。
2023-07-04 23:51:15
783
原创 WPF 控件设计艺术[按钮篇六]
三、按钮篇(六)Windows系统设置主页按钮-WindowsSettingsHomeButton按钮由图标、主题文本和描述文本组成,图标与文本颜色分开,默认背景为白色或者透明。来,咱们看看Windows Setting里面得样子吧,如下图所示:接下来我们分析下,按钮的效果:鼠标放上去,显示背景框鼠标按下,整体有收缩感觉(模糊化)由于按钮中的元素与我们之前使用的按钮样式一致,因此我们本次按钮样式设计也是基于DescIconButton自定义按钮实现的,首先还是将他的定义贴出来:
2021-01-13 22:48:33
1839
2
原创 WPF 控件设计艺术[按钮篇五]
三、按钮篇(五)带描述图文按钮-WithDescIconTextButton按钮内容同时存在图标、主要文本以及对按钮功能的描述补充文本,并且图标、主要文本和描述文本都能根据不同功能变化。我们看下我们参考的按钮的样子吧,如下图所示:接下来我们分析下,按钮的效果:默认情况下,背景为透明鼠标放上去,有一个灰色背景色鼠标按上去,背景色加深,图标和文本加粗在实现时,我们同样使用自定义控件,继承之前的IconButton 并添加添加对应的Description依赖属性即可,DescIco
2021-01-10 18:25:14
1019
原创 WPF 控件设计艺术[按钮篇四]
三、按钮篇(四)图文合并按钮-IconTextButton同样的,我们找到我们需要设计的按钮样式,如下图左上角的主页按钮哦来分析一下吧,我们通过使用WindowsSettings中的这个面板的按钮,可以分析出如下特点:按钮内容同时存在图标和文本,并且图标和文本都能根据不同功能变化。默认情况下,背景为透明鼠标放上去,有一个灰色背景色鼠标按上去,背景色加深,图标和文本加粗由于该按钮由一个图标和文本组成,因此我们就是用上个样式定义的IconButton类就可以了,使用IconDa
2021-01-09 11:51:52
1088
原创 WPF 控件设计艺术[按钮篇三]
三、按钮篇(三)纯图标按钮-IconOnlyButton同样的,我们找到我们需要设计的按钮样式,如下图左上角的按钮哦来分析一下吧,我们通过使用WindowsSettings中的这个面板的按钮,可以分析出如下特点:按钮内容为图标,以及通过自定义控件实现默认情况下,背景色为白色(无背景)鼠标放上去,会有一个背景色鼠标按下,背景变为蓝白色由于该按钮添加了一个图标,该属性我们想通过依赖属性来定义,这样我们就可以再XAML或者其他地方进行设置了。所以我们首先在项目中添加如下的Icon
2021-01-09 11:37:46
1578
原创 WPF 控件设计艺术[按钮篇二]
三、按钮篇(二)带背景按钮-BackdropButton按照前面的步骤,创建一个按钮的样式模板,如下图所示。找到我们要设计的带有背景效果按钮。在窗体中新建一个按钮,然后按照之前的方式创建模板添加颜色资源、设置模板、设置触发器,代码如下。 <SolidColorBrush x:Key="Button.Static.Background" Color="#FFC3C3C3"/> <SolidColorBrush x:Key="Bu
2021-01-09 11:30:56
1311
原创 WPF 控件设计艺术[按钮篇一]
三、按钮篇(一)纯文本按钮-TextOnlyButton创建一个Button按钮,设置宽高右键设计窗口中的按钮,找到编辑模板的编辑副本,并点击它。如下图所示。此时会弹出一个对话框,提示我们选择创建资源名称和定义位置,如下图所示。我们可以不用管,但为了方便,我们设置一下名称TextOnlyButton,然后点击确定。此时,会在我们MainWindow中的Resources中创建一些资源信息,如下图所示。我们可以简单将上面的资源文件划分为三类,如下图所示,分别是:焦
2021-01-09 11:13:58
2858
原创 WPF 控件设计艺术[开篇]
WPF 控件设计艺术——样式、模板、触发器、数据绑定WPF 控件设计艺术——样式、模板、触发器、数据绑定:围绕WPF控件设计,从样式、模板、触发器和数据绑定触发,引导初学者快速设计和使用WPF控件设计富有个性的WPF控件。一、引言内容本次开发主要围绕WPF中现有的控件,其一:对控件属性等信息含义讲解;其二:对控件的基本使用演示;其三:以及如何根据现有控件设计具有自己特色的控件。目的引导初学者(会C#并且稍微了解WPF)学习如何使用WPF控件,提高WPF应用软件开发效率。记录成长,可以在自己目前热
2021-01-09 11:02:03
1923
原创 C# 字符串中去掉换行符、间隔符等特殊字符
C# 字符串中去掉换行符、间隔符等特殊字符1.String.Replace方法在C#中替换字符串中的字符我们可以使用String提供的Replace方法。 string s = "sdsd"; string ss = s + Environment.NewLine; var eeee = ss.Replace(Environment.NewLine, ""); var nes = ss.Repla
2020-10-24 17:39:00
8600
原创 C# 获取本机网络信息
C# 获取本机网络信息IP MAC DNS 等信息获取 private void GetLocalInfo() { textBlock1.Text = ""; StringBuilder sb = new StringBuilder(); NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); //
2020-09-29 18:21:26
1127
原创 C# 死循环等待方式
C# 死循环等待方式在工业软件、上位机等需要对硬件设备进行实时通信的开发过程中,我们经常会使用死循环来循环读取缓冲区的数据。如下所示 private void Receive() { while (true) { //返回接收缓冲区中尚未被读取的帧数 UInt32 num = VCI_GetReceiveNum(devType, devIndex, devChannel);
2020-08-18 21:36:43
6750
1
原创 WPF 鼠标在控件上晃动,CPU占用高,界面不刷新问题
WPF 鼠标在控件上晃动,CPU占用高,界面不刷新问题首先,在MVVM模式下,我们刷新界面的方式工作通过属性绑定转移到更新绑定数据源。此时,我们通常会使用子线程去执行一些查询等耗时任务,执行完成之后,直接更新数据源。或者开一个定时器(System.Threading.Timer)去实时更新我们的绑定数据源。一般情况下,我们的界面更新是很正常的。但是,当我们更新的数据源很多,更新频率很快时。晃动我们鼠标(在控件面板上移动)时,有时会发现一个有趣却又很苦逼的现象——鼠标晃动导致界面更新卡住了。我最开始遇
2020-07-22 17:46:55
1637
原创 WPF Popup Using
WPF Popup Using示例Popup控件由两部分组成:呈现弹起内容的Popup控件和触发该Popup的控件组成。下面我们以toggleButton和Popup组合起来做一个浮窗效果。<Window x:Class="Deamon.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com
2020-06-02 19:49:18
782
1
原创 WPF ComboBox Styles
WPF ComboBox Styles第一种样式<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <!--ComboBox--> <!--ComBoBox项选中背景色-->
2020-05-31 19:32:51
997
原创 WPF Slider Styles
WPF Slider Styles第一种样式- <Style x:Key="SliderRepeatButtonStyle" TargetType="{x:Type RepeatButton}"> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="IsTabStop" Value="false"/> <Sett
2020-05-31 18:52:28
779
原创 WPF TabControl 数据绑定
WPF TabControl in Binding’s world首先,TabControl是间接继承自ItemControl的控件,因此可以像ItemControl那样自如的使用。自此,我们知道了ItemControl的派生控件有:ItemControl–>Selector–>ListBoxItemControl–>Selector–>ListBox–>ListViewItemControl–>Selector–>ComboBoxItemControl
2020-05-22 20:03:17
7004
原创 WPF TabControl Styles
WPF TabControl Styles水平使用的TabControl效果:样式资源 <!-- 顶部TabControl控件样式 --> <SolidColorBrush x:Key="TabItem.Static.Background" Color="White"/> <SolidColorBrush x:Key="TabItem.Static.Border" Color="#ACACAC"/>
2020-05-22 19:58:42
2134
原创 WPF 加载摄像机视频
WPF 加载摄像机视频WPF 显示摄像机可以借助AForge进行实现视频显示和数据录制。视频显示1.引入AForge库文件NUGet导入AForgeAForge.VedioAForge.Vedio.DirectShow2.设置UI添加一个Image控件,用于视频呈现。<Window x:Class="Rxbit.Views.Scane.CameraWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/
2020-05-15 19:39:46
1618
原创 C# 文件操作笔记
C# 文件操作笔记找到当前路径下文件扩展名相同的文件 /// <summary> /// 找到当前路径下文件扩展名相同的文件 /// </summary> /// <param name="path">路径</param> /// <param name="ext">扩展名</param> /// <returns></return
2020-05-15 19:38:28
307
原创 C# 从补码中获取有符号数的实际数值
C# 从补码中获取有符号数的实际数值原理计算机存储数据时,默认是存储数据的补码。有符号的数粗存在符号位(最高位)。这里就会提到原码、反码、补码的概念。原码:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。补码:正数的补码与原码相同,负数的补码为对该数的原码除...
2020-05-01 18:27:11
1976
原创 WPF DataGrid的列标题样式设计
WPF DataGrid的列标题样式设计能够换行1.定义列样式 <DataTemplate x:Key="HeaderTemplateCenterAlign"> <Border> <TextBlock TextWrapping="Wrap" Text="{Binding Path=Content, Rel...
2020-04-28 19:11:55
1521
原创 WPF ItemControl 相关的数据源排序显示
WPF ItemControl 相关的数据源排序显示直接操作绑定的数据源,例如将新增的元素显示到最前头,可以在添加数据源时,使用Insert函数,直接添加到集合中的首个位置。如下所示。using System.Collections.Generic;// 添加新数据时LaneTriggerInfoViewModel.Singleton.TrpTriggers[lane.Key - 1]...
2020-04-28 19:06:36
609
原创 WPF MenuItem In Binding's world
WPF MenuItem In Binding’s world自定义Menu样式<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/...
2020-04-24 20:05:51
620
原创 WPF 坐标投影
WPF 坐标投影有些时候,我们需要自己来制作一个画板,并在画板上绘制我们想要的内容(画图、状态图、统计图等)。此次给大家介绍一下自制画板。建立画板建立一个画板,并在画板中建立一个绘图区域TragetsCanvas,并用10X10px的小方格进行分割,添加刻度画板ScaleCanvas,刻度画板与绘图区域之间存在一些间隔,这些间隔用于填充坐标等分割信息。 <Canvas Width="...
2020-04-22 20:42:03
964
原创 Git 本地使用,结合VS
Git 本地使用,结合VS有些时候,我们需要通过Git来做本地代码管理,替代自己通过手动创建日志、保存版本文件。通过Git可以很好的记录修改和回退版本。1.安装Githttps://git-scm.com/downloads2.常用命令3.创建一个本地仓在当前文件目录下新建一个本地仓wemove,并初始化。命令分别如下$ mkdir wemove$ cd wemove$ pw...
2020-04-18 18:30:58
2930
原创 WPF 切换控件界面库资源
WPF 切换控件界面库资源在实际项目开发中,我们经常是使用别人开发好的界面库。但是不同界面库涉及的控件和对控件的默认样式存在偏差。为了能在不同的项目中使用多种界面库。最开始没有想过,觉得不好实现。但是实际来使用的时候,发现非常简单。本次示例以MaterialDesignUI和ModernUI切换为例。NuGet界面库程序包分别添加MaterialDesignThemes和ModernUI....
2020-04-17 19:40:36
1259
原创 WPF 自定义界面语言包
WPF 语言包1定义语言资源在Luanguage文件夹下添加StringResource.en-US.xaml与StringResource.zh-CN.xaml分别定义语言为英语和中文的语言资源文件。StringResource.en-US.xaml<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/...
2020-04-12 21:03:58
772
原创 C# 字节(数组)与位之间的计算
C# 字节(数组)\16\32\64…位数据与位之间的计算运算符介绍运算名称运算符号左移<<右移>>与&或|非^截取数据例如: UInt32 mini = 0x000ED0FF; UInt16 low16 = (UInt16)(mini & 0xFFFF); UInt16 hight16...
2020-04-12 21:02:16
4433
原创 WPF 枚举类型与ComboBox绑定
WPF 枚举类型与ComboBox绑定通过枚举类型建立集合很多时候,我们需要直接获取枚举值的值,将其绑定到ComboBox之类的控件中。因为我们知道,ComboBox的ItemsSource是一个集合,因此我们需要将枚举值变成一个集合,然后绑定到ComboBox中,可以通过绑定SelectedItem/SelectedValue实现获取选中元素。枚举定义 public enum Azimu...
2020-04-03 20:06:27
6523
原创 WPF 语言包自定义与使用
WPF 语言包1定义语言资源在Luanguage文件夹下添加StringResource.en-US.xaml与StringResource.zh-CN.xaml分别定义语言为英语和中文的语言资源文件。StringResource.en-US.xaml<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/...
2020-04-03 20:03:15
1015
原创 C# 日志文件存储
C# 日志文件存储思路:直接对txt文件内容进行存储即可。存储时,手动设置存储内容。核心程序 /// <summary> /// 日志系统 /// </summary> public class LogAct { /// <summary> /// 普通日志 /...
2020-03-24 08:46:36
1173
WPF MaterialDesign开源免费UI组件的简单使用
2019-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅