原文:WPF (DataGridColumnHeader)实现自义定列头样式 并绑定数据

实现功能是这样的

自定义列头 样式 样式里的 数据来源于后台绑定

这篇就说头样式 和头样式数据绑定

思路

1)实现功能的时候 首先想的是编辑列头样式 选择使用DataGridTextColumn 编辑 DataGridColumnHeader 样式

样式很简单 就布局好了 这段结束

2)动态列 没有要求换肤 所以就没有完全使用MVVM 直接写后台循环   到这里数据有了

    1. List<string> LS = new List<string>();
        1. public void addColumn()
          1. {
            1. LS.Add("表下カップ綿天竺仮縫い_37s_C_1");
              1. LS.Add("上カップマーキしつけ_28s_C_2");
                1. LS.Add("上下カップ接ぎ_33s_C_3");
                  1. LS.Add("上下カップ押え_62s_B_4");
                    1. LS.Add("カップ脇しつけ_14s_B_5");
                      1. LS.Add("表上カップレース端押さえ_41s_B_6");
                          1. for (int i = 0; i < LS.Count; i++)
                            1. {
                              1. DataGridTextColumn dl = new DataGridTextColumn();
                                1. dl.Header=LS[i];
                                    1. dataGrid.Columns.Add(dl);
                                      1. }
                                          1. }
                                        1.  

                                        3)最难的数据绑定 数据来源 header 如果有只有俩个 就不用那么麻烦 直接在样式里ControlTemplate   中用TemplateBinding 绑定 Content 和tag  就可以

                                        {TemplateBinding Content}

                                        content = Header 里的值  当然 要使用tag 就要在上面的for 里加上tag的值 样式里 需要 绑定{TemplateBinding tag}

                                        但是 我的项目需要4个 这就需要夸越TemplateBinding 这个绑定 我查了一下 想扩展template 但是资料太少

                                        解决方法  自义定控件

                                        首先我显示的控件是lable 所以 我自定义了一个lable 写 依赖属性 虽然有点繁琐 也算是一个比较笨的解决方案

                                        1)定义 Ms  来获得header的数据  并处理数据

                                        2)定义MyProperty 来获得Ms处理后的数据 绑定到 lable 的 Content 属性

                                        3)使用控件本身的tag 来区分那个lable

                                        贴码:

                                        自定义的lable控件

                                          1. public class LableColumn : Label
                                            1. {
                                              1. public LableColumn()
                                                1. : base()
                                                  1. {
                                                    1. }
                                                        1. //获得值
                                                          1. public string Ms
                                                            1. {
                                                              1. get { return (string)GetValue(MsProperty); }
                                                                1. set { SetValue(MsProperty, value); }
                                                                  1. }
                                                                      1. // Using a DependencyProperty as the backing store for ms. This enables animation, styling, binding, etc...
                                                                        1. public static readonly DependencyProperty MsProperty =
                                                                          1. DependencyProperty.Register("Ms", typeof(string), typeof(LableColumn), new FrameworkPropertyMetadata("", Onshow));
                                                                                  1. //用于绑定的值
                                                                                    1. public string MyProperty
                                                                                      1. {
                                                                                        1. get { return (string)GetValue(MyPropertyProperty); }
                                                                                          1. set { SetValue(MyPropertyProperty, value); }
                                                                                            1. }
                                                                                                1. // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
                                                                                                  1. public static readonly DependencyProperty MyPropertyProperty =
                                                                                                    1. DependencyProperty.Register("MyProperty", typeof(string), typeof(LableColumn), new PropertyMetadata(""));
                                                                                                                1. private static void Onshow(DependencyObject d, DependencyPropertyChangedEventArgs e)
                                                                                                                  1. {
                                                                                                                    1. LableColumn l = d as LableColumn;
                                                                                                                        1. if (l.Ms != null && l.Ms != "")
                                                                                                                          1. {
                                                                                                                            1. String[] strarr = l.Ms.ToString().Split(new string[] { "_" }, StringSplitOptions.None);
                                                                                                                                1. if (l.Tag.Equals("1"))
                                                                                                                                  1. {
                                                                                                                                    1. l.MyProperty= strarr[3];
                                                                                                                                      1. }
                                                                                                                                        1. else if (l.Tag.Equals("2"))
                                                                                                                                          1. {
                                                                                                                                            1. l.MyProperty = strarr[0];
                                                                                                                                                1. }
                                                                                                                                                  1. else if (l.Tag.Equals("3"))
                                                                                                                                                    1. { l.MyProperty= strarr[2] ;
                                                                                                                                                      1. }
                                                                                                                                                        1. else if (l.Tag.Equals("4"))
                                                                                                                                                          1. {
                                                                                                                                                            1. l.MyProperty= strarr[1];
                                                                                                                                                              1. }
                                                                                                                                                                1. }
                                                                                                                                                                  1. }
                                                                                                                                                                        1. }
                                                                                                                                                                      1.  

                                                                                                                                                                      前台的DataGridColumnHeader 样式

                                                                                                                                                                        1. <Style TargetType="{x:Type DataGridColumnHeader}">
                                                                                                                                                                          1. <Setter Property="VerticalContentAlignment" Value="Center"/>
                                                                                                                                                                            1. <Setter Property="Template">
                                                                                                                                                                              1. <Setter.Value>
                                                                                                                                                                                1. <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                                                                                                                                                                                    1. <Grid HorizontalAlignment= "Left " Height= "Auto " VerticalAlignment= "Stretch " Width= "Auto " Background= "White " Margin= "0 ">
                                                                                                                                                                                      1. <Grid.RowDefinitions>
                                                                                                                                                                                        1. <RowDefinition Height= "* "/>
                                                                                                                                                                                          1. </Grid.RowDefinitions>
                                                                                                                                                                                            1. <Border BorderBrush= "Black " BorderThickness= "1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Grid.RowSpan= "1 ">
                                                                                                                                                                                              1. <Grid HorizontalAlignment= "Stretch " Height= "Auto " Margin= "-1,0,0,0 " VerticalAlignment= "Stretch ">
                                                                                                                                                                                                1. <Grid.RowDefinitions>
                                                                                                                                                                                                  1. <RowDefinition Height= "20* "/>
                                                                                                                                                                                                    1. <RowDefinition Height= "20* "/>
                                                                                                                                                                                                      1. <RowDefinition Height= "20* "/>
                                                                                                                                                                                                        1. <RowDefinition Height= "20* "/>
                                                                                                                                                                                                          1. </Grid.RowDefinitions>
                                                                                                                                                                                                            1. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "1 ">
                                                                                                                                                                                                              1. <local:LableColumn Tag="3" Content="{Binding RelativeSource={RelativeSource self},Path=MyProperty}" Ms="{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "25 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
                                                                                                                                                                                                                1. </Border>
                                                                                                                                                                                                                  1. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto ">
                                                                                                                                                                                                                    1. <local:LableColumn Tag="1" Content="{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms="{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "25 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
                                                                                                                                                                                                                      1. </Border>
                                                                                                                                                                                                                        1. <local:LableColumn x:Name="lText" Tag="2" Content="{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms="{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 " Visibility="Collapsed"/>
                                                                                                                                                                                                                            1. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0,0,0,0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "2 ">
                                                                                                                                                                                                                              1. <TextBlock TextWrapping = "Wrap " Background= "#FFF9F9F9 " Text="{Binding Path=Content,ElementName=lText}" HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
                                                                                                                                                                                                                                  1. </Border>
                                                                                                                                                                                                                                    1. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "3 ">
                                                                                                                                                                                                                                      1. <local:LableColumn Tag="4" Content="{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms="{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
                                                                                                                                                                                                                                        1. </Border>
                                                                                                                                                                                                                                          1. </Grid>
                                                                                                                                                                                                                                            1. </Border>
                                                                                                                                                                                                                                              1. </Grid>
                                                                                                                                                                                                                                                  1. </ControlTemplate>
                                                                                                                                                                                                                                                    1. </Setter.Value>
                                                                                                                                                                                                                                                      1. </Setter>
                                                                                                                                                                                                                                                        1. </Style>
                                                                                                                                                                                                                                                      1.  

                                                                                                                                                                                                                                                      数据绑定的技能 这边涉及到俩种

                                                                                                                                                                                                                                                      一个是绑定自身属性

                                                                                                                                                                                                                                                      1. {Binding MyProperty, RelativeSource={RelativeSource self}}

                                                                                                                                                                                                                                                      第二是绑定其他控件属性

                                                                                                                                                                                                                                                      1. {Binding Path=Content,ElementName=lText}

                                                                                                                                                                                                                                                      肯定有更好的方法来实现 这个功能  希望有人留言 得以分享学习

                                                                                                                                                                                                                                                      WPF (DataGridColumnHeader)实现自义定列头样式 并绑定数据的更多相关文章

                                                                                                                                                                                                                                                      1. WPF (DataGridRowHeaderStyle)实现自义定行样式 并绑定数据

                                                                                                                                                                                                                                                        原文:WPF (DataGridRowHeaderStyle)实现自义定行样式 并绑定数据 功能阐述 就上面那图片 刚开始 考虑使用 RowHeaderTemplate 来实现  发现总绑定不上数据  ...

                                                                                                                                                                                                                                                      2. WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定

                                                                                                                                                                                                                                                        原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定 WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 上面的 ...

                                                                                                                                                                                                                                                      3. WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)

                                                                                                                                                                                                                                                        原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件  大 ...

                                                                                                                                                                                                                                                      4. WPF 用 DataTemplate 合并DataGrid列表列头<类似报表设计>及行头列头样式 - 学习

                                                                                                                                                                                                                                                        WPF中 DataGrid 列头合并,类似于报表设计.效果图如下↓ 1.新建一个WPF项目WpfApplication1,新建一个窗体DataGridTest,前台代码如下: <Window x ...

                                                                                                                                                                                                                                                      5. Extjs 动态修改gridPanel列头信息以及store数据的方法

                                                                                                                                                                                                                                                        1 /*******************************checkbox按钮 历史报警信息**************************************/ var check ...

                                                                                                                                                                                                                                                      6. dataTable 加了竖向滚动条导致列头样式错位的问题 / 亲测可用,不好用你打我,用好了记得点推荐

                                                                                                                                                                                                                                                        tab在没有显示之前,容器是没有高度宽度的,而dt在自动计算高度和宽度时是获取的外部容器的高度和宽度,当切换tab时,dt获取不到这个高度宽度,导致列头都挤在一起,是用下面代码解决此问题 $('a[d ...

                                                                                                                                                                                                                                                      7. WPF报表自定义通用可筛选列头-WPF特工队内部资料

                                                                                                                                                                                                                                                        由于项目需要制作一个可通用的报表多行标题,且可实现各种类型的内容显示,包括文本.输入框.下拉框.多选框等(自定的显示内容可自行扩展),并支持参数绑定转换,效果如下: 源码结构 ColumnItem类: ...

                                                                                                                                                                                                                                                      8. 设置DatagridView的列头样式

                                                                                                                                                                                                                                                        设置DataGridView.ColumnHeaderDefaultCellStyle的BackColor属性会发现没有效果.这是因为在启动了可视样式的时候,BackColor和ForeColor的值 ...

                                                                                                                                                                                                                                                      9. WPF Datagrid 动态生成列 并绑定数据

                                                                                                                                                                                                                                                        原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

                                                                                                                                                                                                                                                      随机推荐

                                                                                                                                                                                                                                                      1. js-07-事件

                                                                                                                                                                                                                                                        一.js事件绑定在对象上的三种方法 a:将事件绑定在元素标签的属性上 <h3 onclick="console.log('奥特曼打怪兽')">海绵宝宝历险记</h ...

                                                                                                                                                                                                                                                      2. 超宽banner图在版心居中

                                                                                                                                                                                                                                                        步骤如下: 1.版心盒子设置相对定位relative 2.banner图设置绝对定位,设置block,清除默认的间距 3.banner图的left设置:left:50%:  margin-left:- ...

                                                                                                                                                                                                                                                      3. SERCOS总线程序相关

                                                                                                                                                                                                                                                        SERCOS程序就是围绕主机发送MDT电报,伺服在下一个周期发送AT电报作为应答这个原则来实现的,这个过程是由控制字等控制实现的,读程序的时候如果忽略这点,可能在想程序从哪里读数据,在哪里写数据呢.. ...

                                                                                                                                                                                                                                                      4. MySQL数据库~~~~~存储引擎

                                                                                                                                                                                                                                                        1. InnoDB InnoDB引擎特点: 1.支持事务:支持4个事务隔离界别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响. 3.读写 ...

                                                                                                                                                                                                                                                      5. 如何计算Data Guard环境中Redo所需的网络带宽传输 (Doc ID 736755.1)

                                                                                                                                                                                                                                                        How To Calculate The Required Network Bandwidth Transfer Of Redo In Data Guard Environments (Doc ID ...

                                                                                                                                                                                                                                                      6. Java_map的key为自定义对象

                                                                                                                                                                                                                                                        首先自定义Key对象 import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import java ...

                                                                                                                                                                                                                                                      7. Help Hanzo (LightOJ - 1197) 【简单数论】【筛区间质数】

                                                                                                                                                                                                                                                        Help Hanzo (LightOJ - 1197) [简单数论][筛区间质数] 标签: 入门讲座题解 数论 题目描述 Amakusa, the evil spiritual leader has ...

                                                                                                                                                                                                                                                      8. MySql索引背后的数据结构及算法

                                                                                                                                                                                                                                                        本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

                                                                                                                                                                                                                                                      9. @Transactional注解失效

                                                                                                                                                                                                                                                        一.特性 先来了解一下@Transactional注解事务的特性吧,可以更好排查问题 1.service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务 ...

                                                                                                                                                                                                                                                      10. 在 Linux 下学习 C 语言有什么好处?

                                                                                                                                                                                                                                                        作者:宅学部落链接:https://www.zhihu.com/question/23893390/answer/832610610来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...