z概述 WPF常用的表格控件是DataGrid,这个控件在前台XAML编写的话,一般列已经固定,然后给每个列去绑定数据,但是如果我的列不固定,随着运算结果变动呢?...这时候DataGrid,就比较难实现这个需求,这节我就从后台代码去添加控件去实现这个功能. 效果演示 实现方法 -....Grid_Loaded($source,$eventArgs)]" /> 这里我把grid放到了dxlc:LayoutControl中,...这样可以实现grid尺寸超出界面分配的长宽时,横纵出现滑动条:如下图 -.后台代码: 数据模型: public class WidthMetrologyDTO { ///...).FirstOrDefault().EdgePositions.Count; -.生成控件并添加到grid中,并通过SetValue设置控件在grid中的行列位置
本文告诉大家,在后台代码,对 TranslateTransform 做动画的方法 今天小伙伴问我一个问题,说为什么相同的代码,如果设置到按钮上,是可以让按钮的某个属性变更,但是如果设置给 TranslateTransform...的 X 或 Y 就不会有任何值变更 在 WPF 中,通过 官方文档 里面的描述,对于 Freezable 类型的对象,如 SolidColorBrush 和 RotateTransform 和 GradientStop...等类型,都是不支持直接的动画,也就是如以下代码是不能触发动画 假定有 XAML 界面如下,期望在点击按钮时,修改按钮的 TranslateTransform 做动画 <Button...的方式,可以通过在后台代码用 SetTargetName 的方法指定,如下面代码 private void Button_OnClick(object sender, RoutedEventArgs...但是上面代码将会在资源字典加入一个 Storyboard 而没有释放,如果在你的实际代码,我推荐在动画完成之后,删除资源字典的动画 我特别翻了 WPF 编程宝典,发现宝典里面没有这部分知识,也就是没有告诉大家为什么直接给
其实它也可以用于WPF属性验证,本文主要也是讲解该组件在WPF中的使用,FluentValidation官网是: https://fluentvalidation.net/ 。...本文需要实现的功能unsetunset 提供WPF界面输入验证,采用MVVM方式,需要以下功能: 能验证ViewModel中定义的基本数据类型属性:int\string等; 能验证ViewModel中定义的复杂属性...调研中遇到的问题unsetunset 简单属性:验证ViewModel的普通属性比较简单,可以参考FluentValidation官网 ,或者国外holymoo大神的代码: UserValidator.cs...和子属性都实现IDataErrorInfo接口,即可实现复杂属性验证,文章中没有具体实现,但灵感是从这来的,就不具体说该链接代码了,有兴趣可以点击链接阅读,下面贴上代码。...创建验证器 验证属性的写法有两种: 可以在实体属性上方添加特性(本文不作特别说明,百度文章介绍很多); 通过代码的形式添加,如下方,创建一个验证器类,继承自AbstractValidator,在此验证器构造函数中写规则验证属性
WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object) 发布于 2018-11-23...不过,WPF 中依然存在一些例外。...对象在 Resources 中不会自动创建,它会在第一次被使用的时候创建;也就是说,你如果要验证它的跨线程访问,需要使用两个不同的线程访问它(仅仅用一个后台线程去验证它,你会发现后台线程依然能够正常访问它的依赖项属性的值...Style 访问 DetachFromDispatcher 的代码在 public 的 Seal 方法中,这是继承自 internal 的 ISealable 接口的方法。...这点跟 Freezable 是不一样的,Freezable 是需要自己主动编写 XAML 或 C# 代码进行 Freeze 的。
根据名称关闭 使用C#结束 private static void StopNginx() { Process[] processes = Process.GetProcessesByName(...本来我还尝试了用进程对象来结束,但是不行,因为Nginx启动会产生多个进程,单独结束掉一个是不行的!...list_pid); StringBuilder sb = new StringBuilder(); sb.AppendLine("占用" + port + "端口的进程有...} p.Close(); return list_process; } } } 其实就是用CMD获取占用端口的进程...ID netstat -ano|findstr ":10077 " 比如进程ID为16212 查看进程对应的进程名称 tasklist |findstr 16212 结束进程 taskkill /f /
创建完成之后,如果发现界面的代码提示错误,只需要等待一下 NuGet 的还原就可以了,此时什么都不需要做,等一下缓慢的 VisualStudio 加载,加载完成之后就可以看到代码高亮,此时点击运行按钮就可以运行代码...现在已经能看到一个空白的界面了,在 WPF 中写界面推荐用的是 xaml 语言,而后台逻辑依然使用 C# 写,展开一个 MainWindow.xaml 文件可以看到 MainWindow.xaml.cs...双击 MainWindow.xaml.cs 文件就可以看到熟悉的 C# 代码了。...当然想要开发 WPF 项目,还是需要了解一点 WPF 界面开发相关知识,例如如何创建一个按钮,如何创建一个文本框,更高级的是如何进行布局等,当然在这里就先跳过了 然后就是后台服务器端的开发了,还是在 VisualStudio...WPF 项目时说到的 .NET Core 和 .NET Framework 是什么 在 WPF 中如何画出简单界面 基础的 xaml 语法 在 ASP.NET Core 里面控制器是什么 在网页访问对应的链接调用的
不能用于文件名的字符 C# 判断两条直线距离 C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C# 如何在项目引用x86 x64的非托管代码 C# 已知点和向量...C# 判断文件编码 C# 字符串首字符大写 C# 局部函数与事件 C# 枚举转字符串 C# 相对路径转绝对路径 C# 解析 sln 文件 C# 谁改了我的代码 C# 通配符转正则 C#判断文件属于文本或二进制...WPF 对比 UWP 开发中,需要知道的1000个问题 Visual studio C# 代码使用 NotNull visual Studio 无法调试,提示程序跟踪已退出 visual-studio-...让焦点在点击在页面空白处时回到textbox中 win10 uwp 设置 HttpClient 浏览器标识 win10 UWP 访问网页 win10 uwp 读写csv win10 uwp 读写XML...WPF 使用封装的 SharpDx 控件 WPF 修改按钮按下的颜色 WPF 写系统日志 WPF 判断调用方法堆栈 wpf 单例 WPF 只允许打开一个实例 WPF 可获得焦点属性 WPF 在 Alt
创建完成之后,如果发现界面的代码提示错误,只需要等待一下 NuGet 的还原就可以了,此时什么都不需要做,等一下缓慢的 VisualStudio 加载,加载完成之后就可以看到代码高亮,此时点击运行按钮就可以运行代码...现在已经能看到一个空白的界面了,在 WPF 中写界面推荐用的是 xaml 语言,而后台逻辑依然使用 C# 写,展开一个 MainWindow.xaml 文件可以看到 MainWindow.xaml.cs...当然想要开发 WPF 项目,还是需要了解一点 WPF 界面开发相关知识,例如如何创建一个按钮,如何创建一个文本框,更高级的是如何进行布局等,当然在这里就先跳过了 然后就是后台服务器端的开发了,还是在 VisualStudio...WPF 项目时说到的 .NET Core 和 .NET Framework 是什么 在 WPF 中如何画出简单界面 基础的 xaml 语法 在 ASP.NET Core 里面控制器是什么 在网页访问对应的链接调用的...xaml 代码,展开文件可以找到 MainPage.xaml.cs 也就是 C# 代码 本文完成了新建桌面端项目、服务器端项目、移动端项目、前端项目,同时所有项目用到的语言只有 C# 和 xaml 而这里的
本文告诉大家如何扔掉 cs 文件,在 xaml 写 C# 代码,将 xaml 和 C# 代码写在一个文件 在 WPF 的 XAMl 有一个小伙伴也许看到但是忽略的特性就是 x:Code 特性,这个特性在...UWP 版本被干掉了,因为太好用了 其实小伙伴忽略这个特性也是对的,因为从设计上这不是一个好的方案,将 XAML 和业务逻辑 C# 代码放在一个文件里面 但是可以用来做和界面十分相关的逻辑,此时放在...XAML 文件的 C# 代码会提高代码的相关性 请看下面代码 <Button Name="Button" HorizontalAlignment="Center"...文件里面添加按钮点击的事件的方法 本文代码放在 github 欢迎小伙伴访问 但是这个方法有限制的是,因为无法添加using语句,因此限制了很多功能 不过其实这个是可以优化的,也许可以设计为 @code...现在 WPF 开源了,小伙伴可以进行随意的更改,如果构建自己的私有的 WPF 框架版本,请看 手把手教你构建 WPF 框架的私有版本 本作品采用 知识共享署名-非商业性使用-相同方式共享
本文主要针对于数据绑定的基础实现进行介绍,通过此博文你将会有能力编写一个MVVM设计模式的C#、WPF项目。...如果您是C#及WPF的资深开发人员本文可能对您没有太大的帮助,但如果你是一个正在学习和了解C#、WPF的开发人员来说本文可以帮助你认识MVVM设计模式和数据绑定。...这时我们需要用到Command(命令),在本实例中展示了将按钮的点击事件和键盘的回车事件通过命令的方式传到后台,但命令的用法远不止这两种,可以在实际的开发过程中跟据不同的需求在进行学习和尝试。...值得注意的是命令是可以带参数的,前台代码中的CommandParameter就是它的参数,例如按钮点击的命令可以通过参数来确定点击的是哪一个按钮,当然也可以给每一个按钮绑定一个独立的命令。...以上就是本实例中涉及一些要点,这些内容是做WPF和C#开发的基本内容,希望他们能对你的学习和工作起到一些帮助,如果对于本文某些用法写法说法有任何的意见欢迎指正交流。谢谢。
在 WPF 开发中,如果把一个程序发布出去,但是发现有些地方诡异,除了看日志外,如果需要拿到程序实时的输出,可以使用跟踪输出 ,本文告诉大家如何拿到 WPF 的跟踪输出。...官网:DebugView 调试日志大师(DebugView的增强版)-CSDN下载 下载完成直接打开就好,然后开始创建一个空白的 WPF 程序,在按下按钮的时候添加信息,说按下按钮。...创建的 WPF 使用简单的界面,直接放一个按钮 <Button HorizontalAlignment="Center" Content="点击" Click="ButtonBase_OnClick..." VerticalAlignment="Center"> 在后台代码,添加输出 private void ButtonBase_OnClick...(object sender, RoutedEventArgs e) { Trace.WriteLine("德熙点击按钮"); } 这时尝试运行一下代码
•统计代码散落在不同的派生类里面,维护不方便 有鉴于此,我们推出了第二版代码 使用了Tpye-Switch的版本 这一版代码中,我们摒弃了之前在具体的DocumentElement派生类中进行统计的做法...,这一版代码克服了第一个版本中,统计代码散落,具体类依赖统计类的问题,转而我们在统计类中集中处理了统计任务。...至于双分派,顾名思义,就是可以针对两个参数进行运行时绑定的分派方法,不过可惜,C#等都不支持,所以大家现在应该能理解为什么上面的代码不能通过编译了吧,上面的代码通过编译器的扩充,变成了 public...翻译的更直白一点,Visitor模式允许针对不同的具体类型定制不同的访问方法,而这个访问者本身,也可以是不同的类型,看一下UML 在Visitor模式中,我们需要把访问者抽象出来,以方便之后定制更多的不同类型的访问者...,通过调用被访问基类的Accept方法,被访问基类通过语言的单分派,动态绑定了正确的被访问子类,接着在子类方法中,将第一参数当做执行对象再调用一次它的方法,根据语言的单分派机制,第一参数也能被正确的动态绑定类型
也许你会觉得这样没什么好处,因为 C#/.NET 的版本里面 Lambda 表达式一样可以这么做: 1 2 3 4 5 await Task.Run(() => { // 这里的代码会在线程池执行...C# / .NET / WPF 版本 我们现在编写一个自己的 Awaiter 来实现这样的线程上下文切换。...这样,我们便可以在一个上下文中进行线程切换了,而不需要使用 Task.Run 通过一个 Lambda 表达式来完成这样的任务。 现在,这种按照某些特定条件才切换到后台线程执行的代码就很容易写出来了。...Chen 后来在另一篇博客中也编写了一份 WPF / Windows Forms 的线程切换版本。...在此可等待对象中,指的是切换到 WPF 的 UI 线程。
c#中在datagridview的表格动态增加一个按钮方法,如果想要这一套教程的可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流的可以进群...效果图片 : 第一步: 在Load事件中写入代码 //在datagridview中添加button按钮 DataGridViewButtonColumn btn = new...button按钮 DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn(); btn2...别急 我们在 dataGridView1_CellContentClick事件中添加方法 //点击第一行button按钮事件 int index = dataGridView1...id的值 第三步: 相信大家也发现了,我们的按钮都能触发,那这样肯定不能区分删除和修改,于是我们给控件命名的作用就来了 我们在 dataGridView1_CellContentClick事件中修改下刚刚的代码
本文介绍不那么常见的 WPF 相关的知识。 ---- 在 C# 代码中创建 DataTemplate 大多数时候我们只需要在 XAML 中就可以实现我们想要的各种界面效果。...这使得你可能已经不知道如何在 C# 代码中创建同样的内容。 比如在代码中创建 DataTemplate,主要会使用到 FrameworkElementFactory 类型。...可以参考: WPF 后台创建 DateTemplate - Iron 的博客 - CSDN博客 多个数据源合并为一个列表显示 WPF 提供 CompositionCollection 用于将多个列表合并为一个....NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary) 使用代码模拟触摸 WPF 默认情况下的触摸是通过...UWP 的标题栏按钮 模拟 Fluent Design 特效 目前 WPF 还不能直接使用 Windows 10 Fluent Design 特效。
在 WPF 开发中,如果把一个程序发布出去,但是发现有些地方诡异,除了看日志外,如果需要拿到程序实时的输出,可以使用跟踪输出 ,本文告诉大家如何拿到 WPF 的跟踪输出。...官网:DebugView 调试日志大师(DebugView的增强版)-CSDN下载 下载完成直接打开就好,然后开始创建一个空白的 WPF 程序,在按下按钮的时候添加信息,说按下按钮。 ?..." VerticalAlignment="Center"> 在后台代码,添加输出 private void ButtonBase_OnClick...(object sender, RoutedEventArgs e) { Trace.WriteLine("德熙点击按钮"); } 这时尝试运行一下代码...参见: DebugView 调试入门 - CSDN博客 C# Logging using Trace and DebugView Viewing WPF Trace Output Outside of
pack://application:,,,/img/剑指工控.png WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源。...application:,,,:一种用于访问编译时已经知道的文件,代表着授权。 img/剑指工控.png,代表着相对路径。...Viewbox:定义一个内容修饰器,以便拉伸或缩放单一子项使其填满可用的控件,使之有更好的布局及视觉效果。 常用属性: Child:获取或设置一个ViewBox元素的单一子元素。...MenuItem 也可以有多个 MenuItem 元素作为子项,从而构成子菜单。 Separator 用于分隔项控件中各个项的控件。...以上是我目前遇到的一些常用的控件,当然还有很多其它的控件,这就需要我们慢慢的去积累了,xaml这部分就基本完成了,后面主要结合后台代码做一些设计,主要结合读取excel数据写入到sqlite数据库来做说明
最常见的事件用途是窗体编程,在Windows窗体应用程序和WPF应用程序中。 当在窗体中点击按钮,移动鼠标等事件时,相应的后台程序会收到通知,再执行代码。...代码中,我们使用两种赋值模式,但实际上都是为事件testEvent添加一个委。 第二种将函数直接【添加】到事件中,编译时也会把函数转换成委托【添加】到事件中。...在EventHandler中,sender即source,因为它是直接事件。而在冒泡事件中,sender不一定等于source。即发送者不一定是源。 下面我们用WPF来看看路由事件。...比如, 你定义了一个委托,另一个开发者用这个委托做了个多播,当第三个开发者来维护这段代码时,如果他是新手,不了解委托的多播,那就很有可能只修改了委托调用的代码。而没有去同步多播这个委托的代码。...比如WPF虽然支持事件驱动,但MVVM在WPF下的表现堪称完美,所以WPF下的事件几乎没有人用了。
利用资源文件编辑器,可以资源文件的字符串里添加两个条目,然后分别在XAML代码和C#代码中访问他们。...在XAML代码中使用Resources.resx中的资源,需要把程序的Properties名称映射为XAML名称空间,然后使用x:Static标签扩展来访问资源。...如果你想把界面改为英文版,只需要把资源里的值改为英文就可以了,如下图所示,因为在程序中访问资源使用的是资源的名,所以代码无需改动: ? 如果要添加的资源不是字符串,而是图标、图片、音频或者视屏。...使用所略写意味着相对路径,C#代码中的UriKind必须为Relative而且代表根目录的/可以省略。...使用完整写法时是绝对路径,C#代码中的UriKind必须为Absolute并且代表根目录的/不能省略。 使用相对路径可以借助类似DOS的语法进行导航,比如./代表同级目录,../代表父级目录。
今天我们一起来看一下WPF窗体之间的交互-窗体之间的传值。有两个窗体,一个是父窗体,一个是子窗体。要将父窗体的文本框中的值传递给子窗体中的控件。我们该怎么实现?...子窗体的界面: ? 要实现传值,我们首先要在子窗体中定义一个可读可写的公用的字符串:getMessage。然后在父窗体中按下按钮的时候,定义一个字符串Message,用来存放输入框的文字。...再将Message中存放的输入框的文字传递给子窗体中定义的可读可写的公用字符串getMessage。下面看一下实现的后台代码: 父窗体的后台代码: ? 子窗体的后台代码: ?...这里我进行假设一个场景,依然还是有父子窗体,子窗体是父窗体中一个按钮的属性设置器,在子窗体中添上要设置属性的值,然后按设置完成,子窗体关闭,父窗体的相应按钮的属性也根据子窗体中的设置值而改变!...其实这里只是实现这个场景的一种方法,也是比较简单的方法,用到的知识是C#中的委托。这里演示一个最简单的例子: 下面看一下具体实现 在上一个例子中的子窗体新增一个按钮返回BtnReturn。
领取专属 10元无门槛券
手把手带您无忧上云