自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 C# SFTP客户端实现文件传输

3. ssh-keygen -A:生成密钥ssh_host_*_key,在服务端与客户端进行连接时,客户端发给服务端由它生成的公钥,服务端会留存这个公钥以识别OpenSSH。4. /etc/ssh/sshd_config为SSH的配置文件,里面有端口、登陆账号(即Linux账号)、密钥等;2. /etc/init.d/sshd start:运行sshd脚本,start为参数,还有stop啥的。SSH:加密的远程登陆/命令通道协议,可以链接到另一台机器执行命令,也可以传输一些文件;2. 删除远程文件\目录。

2026-09-21 20:27:01 260

原创 C# GRPC 一元与双向流

2. 服务端,调用GRPC发送流进行发送,传递带有id的message后,在线程安全的字典中加入id(key)、TaskCompletionSource<响应message> tcs,并return等待await tcs.Task.ConfigureAwait();双向流GRPC,在proto定义服务与Connect方法,在服务端继承服务、实现Connect方法,服务端、客户端分别通过请求流和响应流来处理数据;Google.Protobuf:xxx.cs里面的使用的方法、对象都是这个包的;

2026-09-13 13:11:11 228

原创 C# 上位机UDP/TCP连接外部设备

UDP(无连接协议)与TCP(三次握手连接状态)不同,UDP的通信双方平等,没有服务端、客户端之分,且UDP通信可以广播,而TCP作为点对点协议,必须先建立连接,因此先用UDP广播获取外部设备IP。目标:上位机读取自身网卡信息,按照已知的外部设备IP,修正网卡自身IP,实现同一网段,再建立TCP连接;连接方式:PC与外部设备通过网线直连,此时PC端需调整IP,让自身与外部设备在同一网段下;目标:通过UPD探测外部连接设备,获取外部设备的IP,再根据IP建立TCP链接;三、 建立TCP连接。

2026-09-06 19:39:07 237

原创 Avalonia 如何在Windows下修改代码并在Linux虚拟机中运行

4. dotnet publish /mnt/hgfs/源码路径/xxxx.csproj -r linux-x64 -c Release / dotnet publish /mnt/hgfs/源码路径/xxxx.slnx -r linux-x64 -c Release。2. tar zxf dotnet-sdk-x.x.x-linux-x64.tar.gz -C ~/.donet:安装官方.net sdk;- sudo mkdir -p /mnt/hgfs:-p 迭代创建多级文件夹;

2026-09-06 17:23:28 230

原创 C# ModBus

简单汇总一下不使用NModBus包的C#上位机侧的ModBus实现;

2026-08-14 20:11:05 76

原创 WPF\MAUI\Avalonia Dispatcher

Dispatcher为线程的调度器,最常见是Application.Current.Dispatcher.Invoke(...)在UI线程上执行一些内容,在某些场景下可将Dispatcher放入Action、或者通过Action将参数传递给UI线程的Dispatcher,以实现在其他线程上(如定时器)中调用UI线程执行一些内容;- Dispatcher.CurrentDispatcher:当前线程的Dispatcher,线程没有Dispatcher就自动关联一个;

2026-08-13 14:22:01 271

原创 MAUI\Avalonia MarkupExtension

MAUI\Avalonia则不可以,只能需要什么返回什么,当然这种方式WPF也可以;| 依赖属性 | DependencyProperty | BindableProperty | AvaloniaProperty || 依赖对象 | DependencyObject | BindableObject | AvaloniaProperty || 类型 | WPF | MAUI | Avalonia |

2026-08-11 13:49:20 72

原创 C#-源生成器

analyzers/dotnet/cs:放到Nuget包中的analyzers/dotnet/cs,在使用Nuget包时,MsBuild会将该路径的dll作为分析器\源生成器;OutpurItemType:将源生成器项目作为分析器\源生成器来加载,而不是加载项目的编译结果dll;打包成Nuget包,需要在Nuget包中添加项目信息,让其他项知道如何引用该Nuget包;源生成器一般作为单独的项目放在解决方案下,可以由其他项目引用,或打包成Nuget包;二、IIncrementalGenerator。

2026-07-26 17:16:45 251

原创 WPF-简单的颜色选择自定义控件

自定义控件会在Themes/Generic.xaml生成一个默认的Style,用于修改Template,对于不需要编辑Template的情况,需如下操作,否则控件无法正常显示。主要靠AI来获得这些信息的,AI很适合生成这种一知半解、不会写能看懂的内容,可能离被淘汰不远了。自定义控件提供了36种颜色,比较简单。主要记录一下如果通过cs代码实现xaml内容。

2026-01-08 19:53:23 186

原创 WPF-控件中的游标与十字线

Chart为自定义的图表控件,于Chart中显示多个折现图。现添加游标,需要显示Chart的水平垂直线和当前横纵轴数值。

2026-01-07 13:46:15 124

原创 WPF-自定义控件的拖拽与删除

依赖属性注册时的三种回调方法,顺序为:ValidateValueCallback(返回bool,为false则校验失败,不用就不给这个参数) - CoerceValueCallback(返回数据,不用就不给这个参数) - PropertyChangedCallback(不返回,不用就不给参数或给个null)。简答介绍一下如何将自定义控件拖拽进入StackPanel,如何将控件拖拽出StackPanel以实现删除。需要实现:拖拽代表符号的控件,进入某个Panel,整理出一个表达式。

2026-01-07 13:15:43 281

原创 WPF-ComboBox-弹窗提示阻止切换

后修改思路,在SelectionChanged事件中进行弹窗阻止,但仍会出现SelectedIndex不变、SelectedItem变化的情况。一开始是在SelectedIndex Binding的属性-Setter中弹窗阻止的,但出现SelectedIndex没有变更、但SelectedItem、Text都变更了的现象,此时SelectedIndex与SelectedItem并不一致,PropertyChanged通知Binding属性也没有用。

2025-10-21 13:06:30 419

原创 WPF-ItemsControl-根据Binding对象来选择Template

总体思路为:不再设置ItemsControl.Template,仅设置ItemsControl.ItemTemplateSelector并传入两个DataTemplate静态属性(可以多个),然后在ItemTemplateSelector中根据Binding对象的情况进行选择。现在想根据ItemsSource Binding具体对象的某个属性,来决定这一个Item使用什么样式,可使用ItemTemplateSelector。

2025-10-21 13:05:38 226

原创 WPF-MVVMToolKit/Prism IOC/Message/Attribute

ObservableRecipient,从ObservableObject中派生,ViewModel继承后自动Register IRecipient<T>中的T,不用再显示调用Register(this, FunctionA),可直接写Receive(FunctionA)。WeakReferenceMessenger\StrongReferenceMessenger区别:StrongReferenceMessenger性能更好,但是在Register后不用了、需要显式UnRegister。

2025-07-24 20:47:22 301

原创 C#-Json/Xml文件处理

简单记录一下Json、Xml处理方法,后续会进行增改。

2025-06-28 18:19:03 133

原创 VS2022-error MC3074命名空间不存在标记

这个玩意已经被淘汰了,现在一般从nuget装上。2、vs2022升级:升级后莫名报错,检查nuget配置,http包源路径有问题;将http修改为https或在Nuget.Config的packageSource项上设置allowInsecureConnections=True(从http改成https再改成http可自动设置该属性)可解决问题;1、cs代码warning:后端cs代码有一处变量未赋值的warning,xaml中未显示命名空间问题,编译时报出xaml error MC3074。

2025-06-26 19:36:46 318

原创 WPF-DataGrid-ColumnHeader增加控件/TemplateColumn内部控件Validation

1、Header为Content,所以一开始我在DataGridTemplateColumn.Content直接画了按钮和图片,发现按钮的Commond无法Binding,查阅资料发现可能是因为DataGridColumn不存在于VisualTree中,因此没有父控件,自然拿不到传下来的DataContext;2、在DataTemplate中无论设置宽度或布局,Header宽度一直无法实现Stretch效果、Header TextBlock都和StackPanel紧贴一起。

2025-06-23 18:36:34 243

原创 WPF-在主窗体显示之前打开其他窗体

通过查阅资料,发现可能是App ShowWindowMode默认为OnLastWindowClose、其他窗体的Close导致了App在OnStartUp后直接ShutDown、就把MainWindow Close了的问题。登陆界面、确认界面都会在主窗体之前打开其他窗体,由此产生了其他Window退出后、MainWindow Show之后不显示MainWindow的问题;发现在OnStartUp结束后MainWindow直接执行了Close;此时弹窗会在App ShutDown时关闭。

2025-06-16 11:49:46 428

原创 WPF-ContentPresenter字体大小颜色设置

ContentPresenter的两个注意点:1、ContentSource 2、文本属性为附加属性TextBlock.FontSize、TextBlock.Foreground等。

2025-06-16 11:48:24 309

原创 WPF-TextBox-PropertyChanged校验的小数点输入问题

当输入“0.0”时,先由ConvertBack从Target变更Source,再由Convert从Source转换回Target,在此过程中后端Binding的Source被修改为0,因此在Convert时也会return 0、而不是0.0,导致TextBox一输入“0.0”就会自动改为“0”。2、修改TextBox的Binding Mode为OneWaytoSource,解决了输入“0.0”后又被Convert成0的问题。针对上面的问题,做了一个违背MVVM架构的决定:在xaml.cs中直接赋初始值。

2025-05-16 10:40:28 622

原创 WPF-点击空白处让TextBox失去焦点

后续发现,如果Windows下有Combobox时,使用PreviewMouseDown会出现无法选中Combobox选项的问题,猜测可能是还没到给Combobox的SelectedItem赋值的时间、隧通事件已经将焦点转移,导致Combobox在被赋值SelectedItem时出现错误;改为冒泡事件MouseDown即可。参考一些资料,可在xaml最高层中增加鼠标事件、在鼠标点下后强行将焦点给到一个没用的TextBox,正在编辑的TextBox就可以失去焦点了。

2025-04-29 11:16:22 305

原创 C#-TreeView/PropertyChanged相关问题

在WPF MVVM INotifyPropertyChanged中,ViewModel在执行构造函数时View还未创建完毕,ViewModel的PropertyChanged还未被监听,因此PropertyChanged为null。其中TreeView、TreeViewItem的DataType设置为本层所需的对象类型,而ItemsSource则设置为下一层所需的对象集合,所以最后一层就不用设置ItemSources了。在使用CommmunityMVVMToolKit时则没有这个问题。

2025-04-24 18:41:32 225

原创 C#-TargetFrameworks多目标框架问题

原因可能是MSBuild编译时,项目引用会从obj\Release\ref\中引用dll,而MSBuild会因为多目标框架的原因、删除obj\Release\ref\下的内容,导致其他项目引用该项目时找不到dll了。原生成路径为bin\Debug or bin\Release,在打包时无法同时把4.5、6.0的dll一起打包,所以修改了OutputPath为bin\$(TargetFramework)\,虽然满足了打包条件,但为后续MSbuild埋了坑。1、4.5过低、nuget包版本不支持。

2025-04-22 16:56:48 512

原创 C#-字节数组与对象的序列化和反序列化

【代码】C#-字节数组与对象的序列化和反序列化。

2025-04-09 20:26:06 254

原创 .net framework项目升级移植.net6

5、引用后nupkg出现了问题,报错“使用中央包版本管理的项目不应定义 PackageReference 项上的版本,但应定义 PackageVersion 项上的版本”,在Directory.Packages.props添加对应的PackageVersion项无用。3、返回到项目升级处,将所有文件进行升级;升级时出现了问题,找不到.net SDK,将C:\Program Files\dotnet\templates下的6.0.29文件夹复制到C:\Program Files\dotnet\sdk即解决;

2025-01-14 16:11:09 542

原创 WPF-Trigger

Style.Triggers:Condition中不能用SourceName,Setter中不能用TargetName,Property只能是当前Style的TargetType类型对象的。Template.Triggers:SourceName、TargetName和DataTrigger的ElementName必须限制本Template内。MultiDataTrigger:多个Condition的DataTrigger,每个Condition都是一个Binding-Value。

2024-12-31 17:58:32 244

原创 WPF-MarkupExtension实现Binding+校验转换器通知

为了避免每次触发事件时,都需要通知所有的属性来让属性再次过一遍Converter,使用了MarkupExtension,并在MarkupExtension触发事件OnTestChanged事件,在这个事件中让所有的TestBinding通知自己负责的所有属性再过一遍Converter。此处MarkupExtension实现了添加Validation和Converter的Binding,此Binding可以自己通知变更。MarkupExtension XAML标记扩展,让自己可以写一个XAML对象。

2024-11-29 18:57:36 294

原创 个人笔记-WPF-Validation增加Binding

随后定义了一个继承DependencyObject的对象X,X放到ValidationRule中,并且将上述资源的依赖属性Binding到X中的依赖属性上。注:如果还有Converter,请将Validation.Errors[0].ErrorContent改为Validation.Errors[1].ErrorContent。当时是校验出现了问题,textbox的文本内容从“abc”改回“abc”,因为其他的校验逻辑导致ValidationRule返回false了,后续就用了这种方法。

2024-11-28 19:48:52 313

原创 bat脚本-MSBuild编译指定项目并复制编译结果

2、AB\CD\xxxx_xxxx中,AB\CD为xxxx_xxxx项目在sln中的路径,_为非法字符的替换。本人有编译某个项目后,将编译生成文件复制到某个路径并运行的需求,写了简易bat,记录备忘。1、MSBUILD 为 C盘MSBUILD.exe路径的环境变量。3、start 后的 "" 使exe不按命令行运行,可直接启动。

2024-11-28 19:11:10 355

原创 个人笔记-vs宏

(ProjectDir) —— 插件或项目的目录路径。$(SolutionDir) —— sln目录路径。

2024-07-18 19:24:46 211

原创 个人笔记-paket打包dll

手动准备paket.template、paket.dependencies与.bat脚本。.bat脚本会在nupkg路径中生成对应.nupkg。

2024-07-17 14:23:15 210

原创 nuget-打包与添加targets操作

注:1、nuget包中打包的dll所需的另外的dll,不能放在files中引用进来,需要将另外的dll放在本地包路径下,并在nuspec的dependencies中进行添加。参考:https://www.cnblogs.com/zhaoxf-nx-pm-csharp-vb-381160500/articles/15717624.html。5. C#项目中安装此本地nupkg,nuget包管理器-设置- nuget包管理器-程序包源-加号增加-省略号选择路径-更新,以此设置本地包路径。

2024-07-09 10:07:22 834

原创 个人笔记-WPF-ValueConverter

在使用多值转换器时,出现了转换输入参数数据类型为int,导致Convert方法value数组参数,除了第一个参数正常外其余参数都为DependencyProperty.UnsetValue的情况,判断应该是数据传递时进行类型转换出了问题,后续直接传Object类型就没问题了。ConverterParameter可以向转换器的Convert方法传递parameter参数。ValueConversion不太确定,我这边有没有都能用。IMultiConverter:多值转换器,转换器输入的参数数量大于1。

2024-06-14 18:32:52 382

原创 个人笔记-C#-UI调度

实例属性,返回当前线程的调度程序,Invoke在当前线程操作UI控件。静态属性,返回主线程的调度程序,Invoke在主线程操作UI控件。尽量在主线程即UI线程上操作UI控件。

2024-06-07 10:43:46 450

原创 个人笔记-C#-BackgroundWorker

backgroundWorker.ReportProgress() -> 触发backgroundWorker.ProgressChanged-> backgroundWorker.ProgressChanged+= YourOwnStuff。backgroundWorker.RunWorkerAsync() -> 触发backgroundWorker.DoWork -> backgroundWorker.DoWork += YourOwnStuff。

2024-06-05 15:56:02 270

原创 个人笔记-C#-Dictionary-TryGetValue

Dictionary检索key值时无需再Contains判断,通过TryGetValue的返回的布尔值和引用类型来获得value值。

2024-06-05 13:32:55 564

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除