WPF技巧:通过代码片段管理器编写自己常用的代码模板提示效率
在写自定义控件的时候,有一部分功能是当内部的值发生变化时,需要通知控件的使用者,而当我在写依赖项属性的时候,我可以通过popdp对应的代码模板来完成对应的代码,但是当我来写属性更改回调的时候,却发现没有对应的RoutedEvent,导致需要手撸那么多的代码,而很多时候一旦项目中赶进度,也许就会因为这个原因,把VM下的逻辑放到了UserContorl里了。(我review别人的代码时,发现了好多这种现象,但是逻辑都写完了,改动又太大,而且可能他们一直处于加班状态,我也不好意思在指出这些问题)。所以这一篇是写使用代码模板辅助我们写UserControl时更好的解耦。下一篇博客是讲usercontrol的。里面很多复杂有规律的代码都不是我手撸的,是通过代码模板添加完之后生成的。
如何使用代码模板
在类中定义属性时输入prop对应的单词,然后按下2次Tab键,就可以生成代码片段。
(1)在类中输入prop=》2次Tab创建属性。
(2)生成如下代码:
- public int MyProperty { get; set; }
这个内容的定义是在Visual Studio 的工具=》代码片段管理器=》语言我选择CSharp=》My Code Snippets下添加我自己的代码片段。
点击添加=》导入选择我的snippet文件点击导入。如下图
我上传的是一个自动添加路由事件用于属性通知的代码片段。
使用方式如上图在类中输入propurv按下2次Tab键就可以快速的创建代码,模板具体如下,可以快速的修改内容。
- private void OnDefaulRoutedEventChanged(MyProperty oldValue, MyProperty newValue)
{
RoutedPropertyChangedEventArgs<MyProperty> args = new RoutedPropertyChangedEventArgs<MyProperty>(oldValue, newValue);
args.RoutedEvent = ownerclass.DefaulRoutedEventChangedEvent;
RaiseEvent(args);
}
public static readonly RoutedEvent DefaulRoutedEventChangedEvent = EventManager.RegisterRoutedEvent("DefaulRoutedEventChanged", RoutingStrategy.Bubble,
typeof(RoutedPropertyChangedEventHandler<MyProperty>), typeof(ownerclass));
public event RoutedPropertyChangedEventHandler<MyProperty> DefaulRoutedEventChanged
{
add { AddHandler(DefaulRoutedEventChangedEvent, value); }
remove { RemoveHandler(DefaulRoutedEventChangedEvent, value); }
}
这篇的主要目的是为了更好的编写代码。是我在自定义控件代码中解耦VM和UserContorl混用的。
我创建了一个C#相关的交流群。用于分享学习资料和讨论问题,这个propuev也在群文件里。欢迎有兴趣的小伙伴:QQ群:542633085
WPF技巧:通过代码片段管理器编写自己常用的代码模板提示效率的更多相关文章
- VisualStudio2019 利用代码片段管理器新建快捷命令
原文:https://www.cnblogs.com/huguodong/p/12694902.html 一.前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段 ...
- jQuery Mobile高手必备的十大技巧和代码片段
与任何新技术一样,常常难就难在如何开始入手. 有鉴于此,我们整理出了与jQuery Mobile库有关的我认为最便利的一些技巧.方法和代码片段. 由于本文不是旨在全面介绍使用jQuery Mobile ...
- iOS开发技巧 -- 复用代码片段
如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...
- YASnippet - emacs 的代码片段管理工具
添加 snippet M-x 然后输入 yas-new-snippet 回车 RET,会出现一个新的 buffer # -*- mode: snippet -*- # name: # key: # - ...
- 超实用的 JavaScript 代码片段( ES6+ 编写)
Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...
- VS2015使用技巧 打开代码片段C#部分
镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1. ...
- 精心收集的 95 个超实用的 JavaScript 代码片段( ES6+ 编写)
https://www.html.cn/archives/8748#table-of-contents https://www.haorooms.com/post/js_regexp
- wpf 路由事件 代码片段
<?xml version="1.0" encoding="utf-8" ?> <CodeSnippets xmlns="http: ...
- Visual Studio使用技巧,创建自己的代码片段
1.代码片段的使用示例 在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个 for(int i = 0; i < length;i++) { } ...
随机推荐
- xxl-job使用遇到的问题
1.背景 最近公司在迁移定时任务,以前老的定时任务是基于quartz搭建的分布式集群服务,遇到如下几个瓶颈问题: 同一个任务只能有一个节点运行,其他节点不执行,导致性能低,资源也浪费 定时任务在抢占执 ...
- Idea项目上传到gitlab(以新建项目为例)
1.首先,需要你自己登录GitLab,并新建一个项目的链接,如下图所示: 图一: 图二: 图三(idea上传时用到此链接): 2.在idea上新建一个demo项目,创建一个Git仓库: 3.点击创建后 ...
- MongoDB(7)- 文档插入操作
插入方法 db.collection.insertOne() 插入单条文档到集合中 db.collection.insertMany() 插入多条文档到集合中 db.collection.insert ...
- .Net RabbitMQ实战指南——客户端开发
开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connecti ...
- 07.ElementUI 2.X 源码学习:源码剖析之工程化(二)
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...
- Python+Selenium学习笔记5 - python官网的tutorial - 交互模式下的操作
这篇笔记主要是从Python官网的Tutorial上截取下来,再加上个人理解 1. 在交互模式下,下划线'_'还可以表示上一步的计算结果 2.引号转义问题. 从下图总结的规律是,字符串里的引号如果和引 ...
- 使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存
一.问题背景 自己开发的Java项目中占用太多的Heap Space.即使在Eclipse的虚拟机参数中设置"-Xms128m -Xms2048m -XX:MetaspaceSize=512 ...
- 深度学习数据特征提取:ICCV2019论文解析
深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...
- YOLOvi(i=1,2,3,4)系列
YOLOvi(i=1,2,3,4)系列 YOLOv4论文链接:https://arxiv.org/pdf/2004.10934.pdf YOLOv4源码链接:https://github.com/Al ...
- 在NVIDIA(CUDA,CUBLAS)和Intel MKL上快速实现BERT推理
在NVIDIA(CUDA,CUBLAS)和Intel MKL上快速实现BERT推理 直接在NVIDIA(CUDA,CUBLAS)或Intel MKL上进行高度定制和优化的BERT推理,而无需tenso ...