如何在既定皮肤下为某个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>
也可以在后台添加
- Style checkstyle = new Style();
- /*这里不能使用checkstyle=dgtemprepeated.CellStyle然后在此style中添加setters中添加setter,
- 当然这种方法在编译时是不报错的,但当运行时就会出错,因为查阅文件指出:
- 只能在该style被第一次使用之前修改.也就是说一旦它被使用就不能再修改,
- 所以当不能确定它何时被第一次使用时,还是小心为妙。*/
- checkstyle.BasedOn = dgtemprepeated.CellStyle;
- //在cellStyle的Get方法中,将TargetType中的很多信息清空了,比如“Name”属性等,所以要在这里重新给TargetType赋值
- checkstyle.TargetType = dgtemprepeated.CellStyle.TargetType;
- //此处构造方法中RoutedEventHandler为dgTempCheckBox_Click事件的路由处理器,当然对于不同的事件采用不用的处理器
- EventSetter eventsetter = new EventSetter(CheckBox.CheckedEvent, new RoutedEventHandler(dgTempCheckBox_Click));
- checkstyle.Setters.Add(eventsetter);
- dgtemprepeated.CellStyle = checkstyle;
这样就简单快捷的为某个control添加了“个性”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!