草庐IT

WPF-dataGrid

全部标签

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

[WPF] MediaElement播放HDR视频泛黄、颜色显示不正确应该如何解决?

当我们在使用MediaElement控件播放HDR视频时会遇到颜色发灰、泛黄的情况,难道是因为控件做的有问题?其实并不是程序问题,只是我们普通的应用程序工作在8bit色深的环境中,而HDR色深为10bit起步。HDR视频色彩空间为BT.202010bit色深。SDR视频(一般视频)色彩空间基本为BT.7098bit色深。当解析出视频帧渲染时,错误的将10bit色深的帧渲染到8bit上,这就会导致颜色显示不正确的问题。所以我们需要将颜色进行校正,使视频看起来跟原来一致。(BT.2020->BT.709)错误的渲染: 校正后: 接下来我们了解下如何将视频颜色校正。没有接触过Shader的同学请移步

[WPF] MediaElement播放HDR视频泛黄、颜色显示不正确应该如何解决?

当我们在使用MediaElement控件播放HDR视频时会遇到颜色发灰、泛黄的情况,难道是因为控件做的有问题?其实并不是程序问题,只是我们普通的应用程序工作在8bit色深的环境中,而HDR色深为10bit起步。HDR视频色彩空间为BT.202010bit色深。SDR视频(一般视频)色彩空间基本为BT.7098bit色深。当解析出视频帧渲染时,错误的将10bit色深的帧渲染到8bit上,这就会导致颜色显示不正确的问题。所以我们需要将颜色进行校正,使视频看起来跟原来一致。(BT.2020->BT.709)错误的渲染: 校正后: 接下来我们了解下如何将视频颜色校正。没有接触过Shader的同学请移步

WPF+ASP.NET SignalR实现简易在线聊天功能

在实际业务中,当后台数据发生变化,客户端能够实时的收到通知,而不是由用户主动的进行页面刷新才能查看,这将是一个非常人性化的设计。有没有那么一种场景,后台数据明明已经发生变化了,前台却因为没有及时刷新,而导致页面显示的数据与实际存在差异,从而造成错误的判断。那么如何才能在后台数据变更时及时通知客户端呢?本文以一个简单的聊天示例,简述如何通过WPF+ASP.NETSignalR实现消息后台通知,仅供学习分享使用,如有不足之处,还请指正。涉及知识点在本示例中,涉及知识点如下所示:开发工具:VisualStudio2022目标框架:.NET6.0ASP.NETSignalR,一个ASP.NET下的类库

WPF+ASP.NET SignalR实现简易在线聊天功能

在实际业务中,当后台数据发生变化,客户端能够实时的收到通知,而不是由用户主动的进行页面刷新才能查看,这将是一个非常人性化的设计。有没有那么一种场景,后台数据明明已经发生变化了,前台却因为没有及时刷新,而导致页面显示的数据与实际存在差异,从而造成错误的判断。那么如何才能在后台数据变更时及时通知客户端呢?本文以一个简单的聊天示例,简述如何通过WPF+ASP.NETSignalR实现消息后台通知,仅供学习分享使用,如有不足之处,还请指正。涉及知识点在本示例中,涉及知识点如下所示:开发工具:VisualStudio2022目标框架:.NET6.0ASP.NETSignalR,一个ASP.NET下的类库

WPF 基于Geometry的橡皮擦功能

这是我大约半年前就想写的随笔。功能很简单。就是基于Geometry的画布,记录鼠标轨迹生成PathGeometry。再就是添加删除Path的功能也就是path笔迹删除。目前是实现了两种方式。1基于预览擦除2实时擦除   两者在具体技术上没有任何的区别都是依靠Geometry.Combine的A-B图形运算       也就是A图形中减去B图形并返回一个新的Geometry类型的图形。同时也都会用上一个GetWidenedPathGeometry的Geometry方法。这个方法会根据原有的path轨迹并使用一个Pen的笔宽去描绘一个同轨迹的形状。不过需要注意的是,获取GetWidenedPath

WPF 基于Geometry的橡皮擦功能

这是我大约半年前就想写的随笔。功能很简单。就是基于Geometry的画布,记录鼠标轨迹生成PathGeometry。再就是添加删除Path的功能也就是path笔迹删除。目前是实现了两种方式。1基于预览擦除2实时擦除   两者在具体技术上没有任何的区别都是依靠Geometry.Combine的A-B图形运算       也就是A图形中减去B图形并返回一个新的Geometry类型的图形。同时也都会用上一个GetWidenedPathGeometry的Geometry方法。这个方法会根据原有的path轨迹并使用一个Pen的笔宽去描绘一个同轨迹的形状。不过需要注意的是,获取GetWidenedPath

[WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度

1.前言最近需要一个WPF的表盘控件,之前Cyril-hcj写过一篇不错的博客《WPF在圆上画出刻度线》,里面介绍了一些原理及详细实现的代码:doubleradius=BackEllipse.Width/2;doublemin=0;doublemax=100;doublestep=360.0/(max-min);for(inti=0;i我本来想直接参考这篇文章的代码封装成一个控件,但我用得不多封装起来又麻烦,索性考虑用ItemsControl实现还比较方便些。2.使用CirclePanel实现既然要用ItemsControl,那首先要有个集合作为它的ItemsSource。在XAML中可以用以

[WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度

1.前言最近需要一个WPF的表盘控件,之前Cyril-hcj写过一篇不错的博客《WPF在圆上画出刻度线》,里面介绍了一些原理及详细实现的代码:doubleradius=BackEllipse.Width/2;doublemin=0;doublemax=100;doublestep=360.0/(max-min);for(inti=0;i我本来想直接参考这篇文章的代码封装成一个控件,但我用得不多封装起来又麻烦,索性考虑用ItemsControl实现还比较方便些。2.使用CirclePanel实现既然要用ItemsControl,那首先要有个集合作为它的ItemsSource。在XAML中可以用以