在写自定义控件的时候,有一部分功能是当内部的值发生变化时,需要通知控件的使用者,而当我在写依赖项属性的时候,我可以通过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技巧:通过代码片段管理器编写自己常用的代码模板提示效率的更多相关文章

  1. VisualStudio2019 利用代码片段管理器新建快捷命令

    原文:https://www.cnblogs.com/huguodong/p/12694902.html 一.前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段 ...

  2. jQuery Mobile高手必备的十大技巧和代码片段

    与任何新技术一样,常常难就难在如何开始入手. 有鉴于此,我们整理出了与jQuery Mobile库有关的我认为最便利的一些技巧.方法和代码片段. 由于本文不是旨在全面介绍使用jQuery Mobile ...

  3. iOS开发技巧 -- 复用代码片段

    如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcod ...

  4. YASnippet - emacs 的代码片段管理工具

    添加 snippet M-x 然后输入 yas-new-snippet 回车 RET,会出现一个新的 buffer # -*- mode: snippet -*- # name: # key: # - ...

  5. 超实用的 JavaScript 代码片段( ES6+ 编写)

    Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...

  6. VS2015使用技巧 打开代码片段C#部分

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1. ...

  7. 精心收集的 95 个超实用的 JavaScript 代码片段( ES6+ 编写)

    https://www.html.cn/archives/8748#table-of-contents https://www.haorooms.com/post/js_regexp

  8. wpf 路由事件 代码片段

    <?xml version="1.0" encoding="utf-8" ?> <CodeSnippets xmlns="http: ...

  9. Visual Studio使用技巧,创建自己的代码片段

    1.代码片段的使用示例 在编写代码中常会使用代码片段来提高我们的编写代码的效率,如:在Visual Studio中编写一个 for(int i = 0; i < length;i++) { } ...

随机推荐

  1. HDR sensor 原理介绍

    HDR sensor 原理介绍 一. HDR sensor 原理介绍 1. 什么是sensor的动态范围(dynamic range): sensor的动态范围就是sensor在一幅图像里能够同时体现 ...

  2. 使用CUDA Warp-Level级原语

    使用CUDA Warp-Level级原语 NVIDIA GPU以SIMT(单指令,多线程)的方式执行称为warps 的线程组.许多CUDA程序通过利用warp执行来实现高性能.本文将展示如何使用cud ...

  3. GPU编程和流式多处理器(三)

    GPU编程和流式多处理器(三) 3. Floating-Point Support 快速的本机浮点硬件是GPU的存在理由,并且在许多方面,它们在浮点实现方面都等于或优于CPU.全速支持异常可以根据每条 ...

  4. 硬件安全模块如何启用AUTOSAR

    硬件安全模块如何启用AUTOSAR How hardware security modules enable AUTOSAR 越来越复杂的软件和车内连接需要越来越多的加密保护.这种保护也必须由经典的实 ...

  5. 使用cookies,免密登录禅道(一)

    导言:在做自动化的过程中,很多时候都需要绕过登录验证码来进行测试,可使用cookie 绕过验证码进行登录. 以下以自己搭建的禅道环境登录为例(其他网站也可以同样道理): #coding=gbkimpo ...

  6. mongodb的ObjectId最后三个字节有趣的地方

    ObjectId 由12个字节组成,其中组成如下: a 4-byte timestamp value, representing the ObjectId's creation, measured i ...

  7. mybatis设置自动提交事务

    我们想要mybatis帮助我们自动提交事务其实很简单,只需要在SqlSessionFactory对象的openSession方法中设置参数为true就可以了,mybatis工具类如下: public ...

  8. HTML基本标签及语法

    HTML简介 什么是HTML 本文素材来源于黑马程序员Pink老师 HTML 指的是超文本标记语言(Hyper Text Markup Language) ,它是用来描述网页的一种语言. HTML 不 ...

  9. 【NX二次开发】Block UI 超级点

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  10. 手写Spring Config,最终一战,来瞅瞅撒!

    上一篇说到了手写Spring AOP,来进行功能的增强,下面本篇内容主要是手写Spring Config.通过配置的方式来使用Spring 前面内容链接: 我自横刀向天笑,手写Spring IOC容器 ...