如何在既定皮肤下为某个style添加内容是我今天碰的问题,皮肤往往是对全局control进行设置的,当然这就无法满足某个个性十足的“另类”了,比如当使用DataGridCheckBoxColumn时,需要给DataGridCell中check添加Checked事件,或者给DataGridTextColumn的Textbox添加TextChanged事件等,那么如何满足这个另类呢?对于此需求我认为最直接简单的办法就是在DataGridCell中下工夫,即对DataGridCell的Style进行编写如下几行:

<DataGridCheckBoxColumn.CellStyle>

<Style>

<EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>

</Style>

</DataGridCheckBoxColumn.CellStyle>

对于DataGridTextColumn的textchanged事件根据以上内容再对应的位置进行更改即可。

但是把此段代码放到何处?直接放到皮肤文件中是不行的,因为一旦放入到皮肤中,每个引用此皮肤的control中都应该有OnChecked事件的定义,如果没有则编译报错!既然皮肤中不行那就只能在“本地”修改了,那么再本地定义的style需不需要重新定义那些那皮肤中已定义的内容?为了更好的“配合”,我们应该像“继承”一样,完全继承皮肤中的东西,然后再添加“个性”的东西,style类的功能就是如此的强大,对于以上需求 我们只做些许改动即可:

<DataGridCheckBoxColumn x:Name="dgtemprepeated"   Binding="{Binding Path=IsRepeated, Mode=TwoWay}"                                                                                                                                                                                                                                                                      <DataGridCheckBoxColumn.CellStyle>

<Style BasedOn="皮肤中对应该control的Style名称">

<EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>

</Style>

</DataGridCheckBoxColumn.CellStyle>

</DataGridCheckBoxColumn>

也可以在后台添加

  1. Style checkstyle = new Style();
  2. /*这里不能使用checkstyle=dgtemprepeated.CellStyle然后在此style中添加setters中添加setter,
  3. 当然这种方法在编译时是不报错的,但当运行时就会出错,因为查阅文件指出:
  4. 只能在该style被第一次使用之前修改.也就是说一旦它被使用就不能再修改,
  5. 所以当不能确定它何时被第一次使用时,还是小心为妙。*/
  6. checkstyle.BasedOn = dgtemprepeated.CellStyle;
  7. //在cellStyle的Get方法中,将TargetType中的很多信息清空了,比如“Name”属性等,所以要在这里重新给TargetType赋值
  8. checkstyle.TargetType = dgtemprepeated.CellStyle.TargetType;
  9. //此处构造方法中RoutedEventHandler为dgTempCheckBox_Click事件的路由处理器,当然对于不同的事件采用不用的处理器
  10. EventSetter eventsetter = new EventSetter(CheckBox.CheckedEvent, new RoutedEventHandler(dgTempCheckBox_Click));
  11. checkstyle.Setters.Add(eventsetter);
  12. dgtemprepeated.CellStyle = checkstyle;

这样就简单快捷的为某个control添加了“个性”。

wpf Style也继承(包含内部定义事件)的更多相关文章

  1. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  2. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  3. MVVM设计模式和在WPF中的实现(四) 事件绑定

    系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中的实现(三)命令绑定 MVVM模式解析和在WPF中的 ...

  4. WPF style 换肤

    原文地址:http://www.cnblogs.com/DebugLZQ/p/3181040.html 原作者:DebugLZQ UI的风格一致性是应用程序应当关注的重要特性. 1.Creating ...

  5. 读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数

    1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例 ...

  6. Qt自己定义事件实现及子线程向主线程传送事件消息

    近期在又一次学习Qt的时候,由于要涉及到子线程与主线程传递消息,所以便琢磨了一下.顺便把有用的记录下来,方便自己以后查询及各位同仁的參考! 特此声明,本篇博文主要讲述有用的,也就是直接说明怎么实现,就 ...

  7. 整理:WPF用于绑定命令和触发路由事件的自定义控件写法

    原文:整理:WPF用于绑定命令和触发路由事件的自定义控件写法 目的:自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分) 自定义控件增加IComman ...

  8. 进程内部异步事件调用组件Async-Event

    项目坐标:https://github.com/cncduLee/async-event async-event 进程内部异步事件调用组件 解决什么问题: 加速服务处理效率.提供进程级别的事件发布和异 ...

  9. XMAL语法系列之-(2)---WPF控件继承图

    WPF控件继承图 1 FrameworkElement 1.1 Panel(面板类元素) 1.1.1 Canvas 1.1.2 DockPanel 1.1.3 Grid 1.1.4 TabPanel ...

随机推荐

  1. SyntaxError: Non-UTF-8 code starting with '\xb4'...

    需在开头指定编码格式,在在最开头添加如下代码: # -*- coding: gb2312 -*- 大功告成!

  2. 标准C程序设计七---76

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. svn的简单知识

    svn的简单知识 一.简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统, 它的设计目标就是取代CVS.互联网上很多版本控制服务已从 ...

  4. ASP.NET MVC Identity 使用自己的SQL Server数据库

    之前在网上看到的一篇后来找不到了,现在自己记录一下. 1.在web.config中添加一个数据库连接. <add name="dataContext" connectionS ...

  5. spring boot原理分析

    1.分析spring-boot-starter-parent <parent> <groupId>org.springframework.boot</groupId> ...

  6. android学习资源

    https://codelabs.developers.google.com/ https://developer.android.com/ http://v.youku.com/v_show/id_ ...

  7. 继承LIst 的类JSON序列化,无法序列化属性的问题

    /// <summary> /// Paged list /// </summary> /// <typeparam name="T">T< ...

  8. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  9. Android gradle 相关配置

    有时候我们需要重命名输出apk文件名,在Android studio 3.0以前我们是这样写的: applicationVariants.all { variant -> variant.out ...

  10. win10拷贝文件卡顿的问题-竟然是winrar搞的

    win10拷贝文件卡顿的问题-竟然是winrar搞的 学习了: http://www.w10zj.com/Win10xy/Win10xf_3378.html 没想到你竟然是这样的WinRAR 去除了s ...