为控件动态添加Style

简介: 原文:为控件动态添加Style此文可解决:  重写控件时,给控件加入子控件或父控件的样式切换问题。 很灵活的可以根据不同内容显示不同样式   子控件作用在: ...
原文: 为控件动态添加Style

此文可解决:  重写控件时,给控件加入子控件或父控件的样式切换问题。 很灵活的可以根据不同内容显示不同样式

 

子控件作用在:

 <DataTemplate x:Key="ColmunHeader1">
                <DockPanel Background="Transparent">
                    <!-- The control to host the filter UI for this column -->
                    <controls:dgDataGrid DockPanel.Dock="Right" />
                    <ContentPresenter x:Name="PART_Content" Content="{Binding}"
                        SnapsToDevicePixels="{Binding SnapsToDevicePixels, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}"
                        HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}"
                        VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}" />
                </DockPanel>
            </DataTemplate>

 

如下样式:

<ControlTemplate x:Key="DataGridCheckBoxColumn1">
                <Grid>
                    <CheckBox 
                />
                </Grid>
</ControlTemplate>

<ControlTemplate x:Key="DataGridTextBoxColumn1">
                <Grid>
                    <TextBox/> 
        </Grid>
</ControlTemplate>
 

然后在子控件类的loaded事件中加入:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace WpfApp1.Controls
{
    public class dgDataGrid : Control
    {
        public DataGridColumnHeader ColumnHeader { get; set; }

        public dgDataGrid()
        {
            this.Loaded += (s, e) =>
              {
                  ColumnHeader = this.FindAncestorOrSelf<DataGridColumnHeader>();
                  var value = ColumnHeader.Column.GetType();
                  if (value == typeof(DataGridTextColumn))
                  {
                      this.Template = this.FindResource("DataGridTextColumn1") as ControlTemplate;
                  }
                  else
                  {
                      this.Template = this.FindResource("DataGridCheckBoxColumn1") as ControlTemplate;
                  }
              };
        }
    }
}

  

 

目录
相关文章
|
缓存 Linux
lscpu命令详解
`lscpu` 是Linux系统下用于显示CPU架构和相关详情的命令,帮助用户了解处理器配置,适用于性能诊断、系统调优和软件部署规划。输出包括架构(如x86_64或ARM)、操作模式、字节顺序、CPU核心和线程信息、NUMA节点等。选项如 `-a` 显示所有CPU信息,`-b` 和 `-c` 分别显示在线和离线CPU信息。信息来源包括sysfs和`/proc/cpuinfo`文件。
720 2
|
Java Spring 微服务
Spring 中优雅的获取泛型信息
简介 Spring 源码是个大宝库,我们能遇到的大部分工具在源码里都能找到,所以笔者开源的 mica 完全基于 Spring 进行基础增强,不重复造轮子。今天我要分享的是在 Spring 中优雅的获取泛型。
4212 0
|
JavaScript UED
如何在Vue3项目中使用防抖节流技巧
在Vue 3项目中使用防抖和节流技巧以优化组件性能,包括使用`lodash`库和自定义实现这两种方法。
1076 0
如何在Vue3项目中使用防抖节流技巧
|
存储 JavaScript 前端开发
uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程
uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程
|
Java API 开发工具
OpenCV On Android开发 - Android Studio上环境配置
OpenCV On Android开发 - Android Studio上环境配置
165 0
|
存储 数据挖掘 Linux
服务器数据恢复-linux操作系统服务器数据丢失的数据恢复案例
linux操作系统服务器数据恢复环境: 某品牌R730服务器+MD3200系列存储,linux操作系统。 服务器故障: 机房意外断电导致服务器linux操作系统部分文件丢失。
|
网络协议 安全 数据安全/隐私保护
OSPF 配置实战
拓扑中的 IP 地址段采用:172.8.AB.X/24 其中 AB 为两台路由器编号组合,例如:R2-R3 之间的 AB 为 23,X 为路由器编号,例如 R3 的 X=3 R1/R4/R6 之间的网段为:172.8.146.X/24,其中 X 为路由器编号。 R4/R5/R6 之间的网段为:172.8.100.X/24,其中 X 为路由器编号。 所有路由器都有一个 Loopback 0 接口,地址格式为:X.X.X.X/32,其中 X 为路由器编号。
500 1
OSPF 配置实战
|
JavaScript 前端开发 开发者
前端基础知识库vue入门教程系列三vuex的使用方式
在vue项目中,如果我们涉及到兄弟组件间的传值(及多个组件共享一个状态)。遇到这种情况使用vuex来解决是目前比较流行的解决方案。虽然在vuex官方文档中详细介绍了vuex的使用方法,但是文档中的内容太过细节,初次阅读不易抓住重点。本篇文章根据自身使用vuex的经验来精简的说明下vuex的使用,希望内能够给初次使用vuex的小伙伴提供些帮助,也希望熟悉这块的道友如发现文章不到之处给出指正。