zoukankan      html  css  js  c++  java
  • 为控件动态添加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;
                      }
                  };
            }
        }
    }
    

      

     

  • 相关阅读:
    git 学习网站
    Vue 部署在 IIS 上
    Element UI 的坑
    Vue 中 Prop 传至的 一个Bug
    Asp.net Core 部署在 IIS上
    今天用UniApp开发, 用到 Vuex 中的 mutations, 设置值的时候好像只能传2个参数, 第一个是固定的state, 第二个是一个值, 不能传第三个了
    anxios 和 uni.request 访问Asp.net 服务器传参出错的坑
    内网计算机设置问题说明
    关于综合布线
    Android学习 -- Activity 以及Activity之间值传递
  • 原文地址:https://www.cnblogs.com/ilison/p/10000885.html
Copyright © 2011-2022 走看看