WPF教学|自定义日期选择控件SmartDate编程全过程 |全干货高级技巧 |进阶Next Level!|GitHub源码公开

作者: 小李趣味多分类: 计算机技术 发布时间: 2024-04-22 12:25:49 浏览:3396 次

WPF教学|自定义日期选择控件SmartDate编程全过程 |全干货高级技巧 |进阶Next Level!|GitHub源码公开

zhi_zhi_:
大佬public sealed class CanvasView : FrameworkElement 自定义控件在构造函数里面 public CanvasView() { KeyDown += ViewOnKeyDown;} 其中键盘事件无法得到响应

【回复】回复 @小李趣味多 :好的感谢
【回复】是个好问题!KeyDown 事件仅在当前控件具有焦点的时候触发,所以通常情况下,KeyDown 事件一般不运作的情况比较多。你可以自己测试一下 :在CanvasView 中通过 MouseDown 事件强制执行 Focus(),然后接收键盘输入,来检查一下 CanvasView 的 KeyDown 事件能不能触发。 然后你还可以在 CanvasView 的子元素中添加一个默认能够获得焦点的 TextBox 控件来测试一下。
不会敲代码的画吒:
up你好,我遇到一个问题,二级popup中,点击时会出现和stylus相关的异常然后程序闪退,我也不是触屏电脑,我找不出原因,您知道问题所在吗。另外为什么我popup 的位置设置是相反的,看了github 说和电脑左右手设置和有关,我查看了注册表设置的是右手,所以也不明白为什么了

【回复】不是太理解你说的具体是什么问题,你可以把能运行起来的代码发我,帮你看看。然后我们GitHub上的源码你也运行一下看看是不是有同样的问题。
ParanoidCoder:
请问为什么要删除默认的项目构成手动搭建,我注意到默认构建和手动搭建的区别,主要是AssemblyInfo.cs和Starter.cs,为什么默认构建不需要main函数,原理是什么呢

【回复】是个好问题!WPF应用程序当中默认提供的 App.xaml 是Partial Class,所以它的内部就会自动生成App.g.i.cs 文件,这个当中也包括Main 函数的入口点代码,这样程序在运行的时候内部就会执行 Run() 。因为它是这种隐藏式的结构,所以WPF 默认架构下应用程序的这种工作方式理解起来就很困难。那么在设计比较精细一点的架构的项目的时候,比起使用默认的结构,手动来配置并且能清晰理解管理要点就很重要了。另外,我们后面的教程中也会更多地来讨论依赖注入、模块化、项目分散等等这一类的架构技术,在这个之前你可以通过我们前几期视频先熟悉一下这些结构,这样后面会更加有帮助 下面这个就是自动生成的文件, 你可以参考看看
【回复】【接上面】 namespace DemoApp { public partial class App : System.Windows.Application { 【System.Diagnostics.DebuggerNonUserCodeAttribute()】 【System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "7.0.5.0")】 public void InitializeComponent() { #line 5 "..\..\..\App.xaml" this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative); #line default #line hidden } 【System.STAThreadAttribute()】 【System.Diagnostics.DebuggerNonUserCodeAttribute()】 【System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "7.0.5.0")】 public static void Main() { DemoApp.App app = new DemoApp.App(); app.InitializeComponent(); app.Run(); } } }
小手一抖2019:
这干货质量,这技术质量,这美女质量。兄弟们,真的,有啥给啥,别让up跑了

【回复】哈哈谢谢 那就请帮我多多分享啦^^
群众演员丙:
讲得流畅,思路也清晰。不过,用Blend将控件打散,再改造 会不会更容易些。

【回复】ContentControl和ItemsControl基础上的Button、ComboBox、ListBox、DataGrid等大多数控件,无论是20年前还是现在,从UI界面和提供的DependencyProperty来看,使用需求都是能充分被满足的。但是和Button、ComboBox、CheckBox等其他控件相比,DatePicker的复杂度是比较高的,每个程序对DatePicker的需求都可能是非常的复杂的,一般都是需要进行详细的自定义。那么为了能自定义基本的DatePicker,就需要熟悉Template、CustomControl等这一类的技术了。 通过Blend提取并分解模板来进行自定义也是一个非常好的学习方法,不知道你有没有看过我们之前的RiotSlider 那期视频,其中就非常详细的介绍了这个部分的内容, 你可以参考一下。 对于开发经验比较丰富的开发者来说,DatePicker这样的控件,不需要分析原始控件的基本结构, 而是根据需求依照这当下的编程趋势直接实现所需的功能,这样的做法更为常见一些。 我们这期视频中讨论的就是这样的方法。掌握这样的方法之后,也就可以更深入地实现控件级别的功能了。 其他疑问的部分也可以随时评论区给我们提问^^
【回复】回复 @小李趣味多 : 有道理,对于复杂控件,根据自己对控件的功能和组成进行解构,可能更清爽直接。丝滑MagicBar那集看过,印象蛮深刻。RiotSlider,我这就去看看。
ggtc:
大部分时间都花在处理generic文件报错上了。老是说找不到SmartDateControl那个命名空间,然后就会添加自定义控件的时候报错。叮咚,叮咚,响得我心都在颤

【回复】SmartDateControl报错问题: 其实在类库项目中不存在SmartDateControl命名空间,所以在 xmlns:local="clr-namespace:SmartDateControl"部分会出现"not be found"错误。 但是,在WPF构建过程中,这一类错误会被忽略并且允许执行,所以像视频中那样可能没能发现到这个问题。最好是确切地把Generic.xaml中默认编写的xmlns:local删掉。视频中这个部分我漏掉了,很抱歉!
【回复】刚开始大家可能都会觉得CustomControl的方法比较难,确实这样的方法一般也都是属于高难度的高级技术。但是也不用太担心,或者焦虑。 这个问题的解决的方法最重要的就是提高熟练度,这支50分钟的视频,我们每一步都有详细的展示和讲解,所以要有耐心,慢慢的一步步进行,并且反复练习。仅凭一两次的高难度练习是很难提高技能的,所以要有不断重复练习的心理准备,过程中如果出现什么问题,可以随时给我们评论。加油![打call]
【回复】网上查了下,命名空间是namespace关键字声明的。照理说删除了项目里面默认的那个类,项目名称那个命名空间就不存在了。在根目录下面创建文件时默认命名空间的名字是在项目文件里面配置的,并不是这个命名空间还存在。这个配置只是一个模板,并不是一个声明语句,看起来是这样。
变质鲜牛奶:
原来SelectedItem和SelectedValue的区别在这里,又学到了一招[加油]

【回复】是的 区分SelectedItem 和 SelectedValue 确实是很重要的知识点~谢谢你的留言哦^^[给心心]

编程教程 编程教学 C# 技巧 教程 编程 wpf编程 源码 wpf

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!