引言 本片文章分享一下之前遇到的WPF应用在触摸屏下使用时的两个问题。 场景 具体场景就是一个配置界面,ScrollViewer中包含一个StackPanel然后纵向堆叠,已滚动的方式查看,然后包含多个TextBlock、TextBox以及DataGrid,期间遇到了两个问题: WPF在触摸屏下,如果有滚动条(ScrollViewer)的情况下,默认包含触底反馈的功能,就是触摸屏滑动到底或从底滑到顶,界面都会出现抖动的情况。 触摸屏下,当触点处于DataGrid中时,无法滚动界面。 大概像这样: 解决方案 触底反馈抖动的问题 先来看第一个问题,这个其实是由于ManipulationBoun...

  uUAzFRvZtFYa   2024年03月08日   27   0   0 .NET

引言 在之前写的一篇文章【WPF--如何以Binding方式隐藏DataGrid列】中,我先探索了DataGridTextColumn为什么不在可视化树结构内?又给出了解决方案,使用Freezable,该抽象类是DependencyObject的子类,能使用依赖属性在Xaml进行绑定,它承载了DataContext且有属性变化通知功能,触发VisibilityConverter转换器,实现了预期功能。 然后有群友问了这样一个问题: 这里有两个问题: 非可视化树中的元素不能通过RelativeSource或者ElementName访问到可视化树中的数据,为何可以通过resource的方式访问...

  uUAzFRvZtFYa   2024年01月12日   22   0   0 .NET

引言 在WPF应用程序开发中,数据校验是确保用户输入数据的正确性和完整性的重要一环。 之前在做一些参数配置功能时,最是头疼各种参数校验,查阅一些资料后,我总结了数据校验方式有两种: ValidationRule IDataErrorInfo 接下来分别介绍这两种校验方式。 ValidationRule ValidationRule是一个抽象类,提供了抽象方法Validate(),它是WPF中用于数据验证的一种机制,它可以在用户输入数据之前或之后执行自定义的验证逻辑。可以轻松地实现对数据的格式、范围、逻辑等方面的验证,并在验证失败时提供相应的反馈信息。 ValidationRule主要作用域...

  uUAzFRvZtFYa   2023年12月31日   24   0   0 .NET

引言 上一篇中WPF--重写DataGrid样式,因新产品UI需要,重写了一下微软WPF原生的DataGrid的样式,包含如下内容: 基础设置,一些基本背景色,字体颜色等。 滚动条样式。 实现圆角表格,重写表格的一些基础样式,例如CellStyle,RowStyle,RowHeaderStyle,ColumnHeaderStyle等。 重写过程中,遇到了两个问题: 如何获取WPF原生的DataGrid的样式? 滚动条样式中,如何固定滚动条长度? 本篇文章分享一下这两个问题的解决办法。 解决方法 我来分别分享一下我遇到的这两个问题。 问题1 第一个,如何获取WPF原生的DataGrid的...

  uUAzFRvZtFYa   2023年12月31日   30   0   0 .NET

引言 如题,如何以Binding的方式动态隐藏DataGrid列? 预想方案 像这样: 先在ViewModel创建数据源People和控制列隐藏的IsVisibility,这里直接以MainWindow为DataContext publicpartialclassMainWindow:Window,INotifyPropertyChanged { publicMainWindow() { InitializeComponent(); Persons=newObservableCollection<Person>(){newPerson(){Age=11,Name="Peter"},...

  uUAzFRvZtFYa   2023年12月31日   23   0   0 .NET

引言 如题,在VS中如何调试.Net源码呢? 一般来说,VS2022,都是默认启用F12转到定义能够看到源码,如果大家发现自己无法使用F12查看源码,可以在"工具"->"选项"->"文本编辑器"->"C"->"高级"->"转到定义",勾选所有选项就对了。 但是光以上的操作还是不够的,这样的可以查看源码中类型和成员的声明,但不能看到其实现。比如,在WPF中,Code-Behind中使用FindResource()查找资源,那我们直接F12转到定义,则像这样: 我们仅能看到他是FrameworkElement类型下的一个方法。并没有具体实现。 示例 那我们怎么看它的...

  uUAzFRvZtFYa   2023年12月31日   29   0   0 .NET

引言 如题,在VS中如何调试.Net源码呢? 一般来说,VS2022,都是默认启用F12转到定义能够看到源码,如果大家发现自己无法使用F12查看源码,可以在"工具"->"选项"->"文本编辑器"->"C"->"高级"->"转到定义",勾选所有选项就对了。 但是光以上的操作还是不够的,这样的可以查看源码中类型和成员的声明,但不能看到其实现。比如,在WPF中,Code-Behind中使用FindResource()查找资源,那我们直接F12转到定义,则像这样: 我们仅能看到他是FrameworkElement类型下的一个方法。并没有具体实现。 示例 那我们怎么看它的...

  uUAzFRvZtFYa   2023年11月28日   79   0   0 .NET

引言 如题,如何以Binding的方式动态隐藏DataGrid列? 预想方案 像这样: 先在ViewModel创建数据源People和控制列隐藏的IsVisibility,这里直接以MainWindow为DataContext publicpartialclassMainWindow:Window,INotifyPropertyChanged { publicMainWindow() { InitializeComponent(); Persons=newObservableCollection<Person>(){newPerson(){Age=11,Name="Peter"},...

  uUAzFRvZtFYa   2023年11月22日   36   0   0 .NET

引言 上一篇中WPF--重写DataGrid样式,因新产品UI需要,重写了一下微软WPF原生的DataGrid的样式,包含如下内容: 基础设置,一些基本背景色,字体颜色等。 滚动条样式。 实现圆角表格,重写表格的一些基础样式,例如CellStyle,RowStyle,RowHeaderStyle,ColumnHeaderStyle等。 重写过程中,遇到了两个问题: 如何获取WPF原生的DataGrid的样式? 滚动条样式中,如何固定滚动条长度? 本篇文章分享一下这两个问题的解决办法。 解决方法 我来分别分享一下我遇到的这两个问题。 问题1 第一个,如何获取WPF原生的DataGrid的...

  uUAzFRvZtFYa   2023年11月18日   34   0   0 .NET

引言 在WPF应用程序开发中,数据校验是确保用户输入数据的正确性和完整性的重要一环。 之前在做一些参数配置功能时,最是头疼各种参数校验,查阅一些资料后,我总结了数据校验方式有两种: ValidationRule IDataErrorInfo 接下来分别介绍这两种校验方式。 ValidationRule ValidationRule是一个抽象类,提供了抽象方法Validate(),它是WPF中用于数据验证的一种机制,它可以在用户输入数据之前或之后执行自定义的验证逻辑。可以轻松地实现对数据的格式、范围、逻辑等方面的验证,并在验证失败时提供相应的反馈信息。 ValidationRule主要作用域...

  uUAzFRvZtFYa   2023年11月17日   36   0   0 .NET

介绍 一、MQTT简介 MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,通常用于在物联网(IoT)和传感器网络中进行通信。它设计用于在低带宽、不稳定或高延迟的网络环境下传输数据,因此非常适用于连接设备之间的通信,尤其是在资源有限的环境中。 MQTT的主要特点包括以下几点: 轻量级:MQTT协议本身非常简洁,消息头部占用较少的带宽,使其在低带宽网络中运行效率高。 发布/订阅模型:MQTT使用发布/订阅模型,其中客户端可以订阅特定的主题(Topic),并接收与该主题相关的消息。发布者发布消息到特定主题,然后所有订阅了该主题的客户端都将收到该...

  uUAzFRvZtFYa   2023年11月06日   83   0   0 .NET

引言 面试中,常会问道,在大数据量的字符串拼接情况,为什么StringBuilder性能比直接字符串拼接更好? 主要原因就是string是不可变类型,每次操作都会创建新的字符串对象,频繁操作会导致内存频繁的分配和回收,就会降低性能,而StringBuilder是可变类型,它允许对字符串进行原地修改,无需每次都创建新对象,其内部使用一个缓冲区来存储字符,可以高效地执行字符串操作,如添加、插入、删除等。 面试题就不多说了,既然这里已经提到了字符串性能,那我们来说一说保证字符串的性能、内存效率和安全性的两大门神: 字符串的不可变性 字符串驻留池 原理与关系 C中的字符串驻留池(StringInt...

  uUAzFRvZtFYa   2023年11月06日   52   0   0 .NET

介绍 这个项目的名称“Fody”来源于属于织巢鸟科(Ploceidae)的小鸟(Fody),本身意义为编织。 核心Fody引擎的代码库地址:https://github.com/Fody/Fody Github上是这样介绍的: Fody是一个用于织制.NET程序集的可扩展工具。它允许在构建过程中作为一部分来操纵程序集的中间语言(IL),这需要大量的底层代码编写。这些底层代码需要了解MSBuild和VisualStudio的API。Fody通过可扩展的插件模型试图消除这些底层代码。这种技术非常强大,例如,可以将简单属性转换为完整的INotifyPropertyChanged实现,添加对空参数的...

  uUAzFRvZtFYa   2023年11月06日   76   0   0 .NET

介绍 这个项目的名称“Fody”来源于属于织巢鸟科(Ploceidae)的小鸟(Fody),本身意义为编织。 核心Fody引擎的代码库地址:https://github.com/Fody/Fody Github上是这样介绍的: Fody是一个用于织制.NET程序集的可扩展工具。它允许在构建过程中作为一部分来操纵程序集的中间语言(IL),这需要大量的底层代码编写。这些底层代码需要了解MSBuild和VisualStudio的API。Fody通过可扩展的插件模型试图消除这些底层代码。这种技术非常强大,例如,可以将简单属性转换为完整的INotifyPropertyChanged实现,添加对空参数的...

  uUAzFRvZtFYa   2023年11月02日   51   0   0 .NET

引言 面试中,常会问道,在大数据量的字符串拼接情况,为什么StringBuilder性能比直接字符串拼接更好? 主要原因就是string是不可变类型,每次操作都会创建新的字符串对象,频繁操作会导致内存频繁的分配和回收,就会降低性能,而StringBuilder是可变类型,它允许对字符串进行原地修改,无需每次都创建新对象,其内部使用一个缓冲区来存储字符,可以高效地执行字符串操作,如添加、插入、删除等。 面试题就不多说了,既然这里已经提到了字符串性能,那我们来说一说保证字符串的性能、内存效率和安全性的两大门神: 字符串的不可变性 字符串驻留池 原理与关系 C中的字符串驻留池(StringInt...

  uUAzFRvZtFYa   2023年11月02日   28   0   0 .NET

介绍 一、MQTT简介 MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,通常用于在物联网(IoT)和传感器网络中进行通信。它设计用于在低带宽、不稳定或高延迟的网络环境下传输数据,因此非常适用于连接设备之间的通信,尤其是在资源有限的环境中。 MQTT的主要特点包括以下几点: 轻量级:MQTT协议本身非常简洁,消息头部占用较少的带宽,使其在低带宽网络中运行效率高。 发布/订阅模型:MQTT使用发布/订阅模型,其中客户端可以订阅特定的主题(Topic),并接收与该主题相关的消息。发布者发布消息到特定主题,然后所有订阅了该主题的客户端都将收到该...

  uUAzFRvZtFYa   2023年11月02日   50   0   0 .NET

引言 最近做一个功能想要动态执行C脚本,就是预先写好代码片段,在程序运行时去执行代码段,比如像这样(以下代码为伪代码): stringscriptText="inta=1;intb=2;returna+b;"; varresult=Script.Run(scriptText); 查阅了一些资料,发现.Net的开源编译器平台Roslyn,可以支持这样的功能。 其实Roslyn提供了很多强大的功能,比如: 提供了一组丰富的API,允许开发人员在运行时动态地生成、编译和执行代码。这些API分为两类:编译API和工作空间API。编译API用于分析和生成代码,工作空间API用于与集成开发环境(ID...

  uUAzFRvZtFYa   2023年11月02日   56   0   0 .NET

引言 上一篇中.Net编译器平台--Roslyn,介绍了Roslyn的各项功能,包括公开API,使用语法,使用语义,使用工作区等功能。 那么回到上一篇中提到的问题,实现类似这样的功能(以下代码为伪代码): stringscriptText="inta=1;intb=2;returna+b;"; varresult=Script.Run(scriptText); 就用到了上一篇提到的ScriptingAPIs,还是先了解一下Roslyn提供的ScriptingAPIs有哪些。 官方文档(https://github.com/dotnet/roslyn/blob/main/docs/wiki/...

  uUAzFRvZtFYa   2023年11月02日   65   0   0 .NET

引言 最近做一个配置的功能,需求是该配置项跟另一个整形配置项关联,具有一定的函数关系,例如有一个配置项是值为N,则另一配置F项满足函数关系\(F=2/(N+1)\)。这个函数关系是客户手动输入,只需要简单的四则运算,所以我们要做的就是判断四则运算表达式是否有效,且给定N的值,算出表达式的值。 如何快速判断一个四则运算公式字符串是否符合规则,且根据给定值计算出该公式的值? 双栈实现 实际上编译器就是利用了双栈实现了的表达式求值,其中一个栈用来保存操作数,另一个栈用来保存运算符。 从左向右遍历表达式,当遇到数字时,就将其直接压入操作数栈;当遇到运算符时,就将其与运算符栈的栈顶元素比较。 如果遇到的...

  uUAzFRvZtFYa   2023年11月02日   86   0   0 .NET

引言 在C中,让线程同步有两种方式: 锁(lock、Monitor) 信号量(EventWaitHandle、Semaphore、Mutex) 线程锁的原理,就是锁住一个资源,使得应用程序在此刻只有一个线程访问该资源。通俗地讲,就是让多线程变成单线程。在C中,可以将被锁定的资源理解成new出来的普通CLR对象。 如何选定 既然需要锁定的资源就是C中的一个对象,我们就该仔细思考,到底什么样的对象能够成为一个锁对象(也叫同步对象)? 那么选择同步对象的时候,应当始终注意以下几点: 同步对象在需要同步的多个线程中是可见的同一个对象。 在非静态方法中,静态变量不应作为同步对象。 值类型对象不能作...

  uUAzFRvZtFYa   2023年11月02日   60   0   0 .NET
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~