如何在既定皮肤下为某个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. Begin to study Deep Learning

    今天是儿童节,我开始了人生的新的阶段.借助这个节日我想在今年静下心来,简单执着的进行学习,不掺杂任何利益. 早上起来的比较晚,洗了床单吃了早午饭,背着书包就来到了公司.软件园里面很多游客,但是背着电脑 ...

  2. 如何发布自己的服务---zookeeper

    人肉告知的方式:如果你发现你的服务一台机器不够,要再添加一台,这个时候就要告诉调用者我现在有两个ip了,你们要轮询调用来实现负载均衡:调用者咬咬牙改了,结果某天一台机器挂了,调用者发现服务有一半不可用 ...

  3. HibernateException: No Hibernate Session bound to thread

    解决No Hibernate Session bound to thread 背景交代 在使用this.getHibernateTemplate().getSessionFactory().getCu ...

  4. 机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】

    转自:http://blog.exbot.net/archives/2966 导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路. ROS和Android一样是开源的,功能 ...

  5. Codeforces Gym101502 H.Eyad and Math-换底公式

    H. Eyad and Math   time limit per test 2.0 s memory limit per test 256 MB input standard input outpu ...

  6. http错误种类及原因

    http://blog.csdn.net/dxykevin/article/details/50950878 [摘要]HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应 ...

  7. JAVA算法总结_时间复杂度_Demo

    JAVA面试中经常问到排序算法问题,本人结合网络上一些资源整理了编写一下常用的Demo,并附带运行结果,希望能帮助到大家. /** * @Title: 冒泡排序 * @Description: 将数组 ...

  8. dtrace 网站

    Oracle SQL Tuning and CBO Internals: Based Optimizer with CBO Internals and SQL Tuning Optimization ...

  9. Intent 传递对象

    方法: 可以让这个要传递的对象所属类实现Serializable或者Parcelable接口, 然后利用onCreate函数中的Bundle参数作为载体,传递这个对象. 例如: <span st ...

  10. Canvas的效果操作及save()和restore()方法应用

    平移.缩放.旋转等操作等于是,我在一个正的画布绘制好图,然后再把画布做旋转.平移.缩放等等的效果. 也就是说,我使用的X.Y坐标还是正常的坐标(没旋转.平移.缩放等之前的坐标). save()和res ...