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

实现功能是这样的

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

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

思路

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

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

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


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

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
  2. {
  3. public LableColumn()
  4. : base()
  5. {
  6. }
  7. //获得值
  8. public string Ms
  9. {
  10. get { return (string)GetValue(MsProperty); }
  11. set { SetValue(MsProperty, value); }
  12. }
  13. // Using a DependencyProperty as the backing store for ms. This enables animation, styling, binding, etc...
  14. public static readonly DependencyProperty MsProperty =
  15. DependencyProperty.Register("Ms", typeof(string), typeof(LableColumn), new FrameworkPropertyMetadata("", Onshow));
  16. //用于绑定的值
  17. public string MyProperty
  18. {
  19. get { return (string)GetValue(MyPropertyProperty); }
  20. set { SetValue(MyPropertyProperty, value); }
  21. }
  22. // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
  23. public static readonly DependencyProperty MyPropertyProperty =
  24. DependencyProperty.Register("MyProperty", typeof(string), typeof(LableColumn), new PropertyMetadata(""));
  25. private static void Onshow(DependencyObject d, DependencyPropertyChangedEventArgs e)
  26. {
  27. LableColumn l = d as LableColumn;
  28. if (l.Ms != null && l.Ms != "")
  29. {
  30. String[] strarr = l.Ms.ToString().Split(new string[] { "_" }, StringSplitOptions.None);
  31. if (l.Tag.Equals("1"))
  32. {
  33. l.MyProperty= strarr[3];
  34. }
  35. else if (l.Tag.Equals("2"))
  36. {
  37. l.MyProperty = strarr[0];
  38. }
  39. else if (l.Tag.Equals("3"))
  40. { l.MyProperty= strarr[2] ;
  41. }
  42. else if (l.Tag.Equals("4"))
  43. {
  44. l.MyProperty= strarr[1];
  45. }
  46. }
  47. }
  48. }

前台的DataGridColumnHeader 样式


  1. <Style TargetType="{x:Type DataGridColumnHeader}">
  2. <Setter Property="VerticalContentAlignment" Value="Center"/>
  3. <Setter Property="Template">
  4. <Setter.Value>
  5. <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
  6. <Grid HorizontalAlignment= "Left " Height= "Auto " VerticalAlignment= "Stretch " Width= "Auto " Background= "White " Margin= "0 ">
  7. <Grid.RowDefinitions>
  8. <RowDefinition Height= "* "/>
  9. </Grid.RowDefinitions>
  10. <Border BorderBrush= "Black " BorderThickness= "1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Grid.RowSpan= "1 ">
  11. <Grid HorizontalAlignment= "Stretch " Height= "Auto " Margin= "-1,0,0,0 " VerticalAlignment= "Stretch ">
  12. <Grid.RowDefinitions>
  13. <RowDefinition Height= "20* "/>
  14. <RowDefinition Height= "20* "/>
  15. <RowDefinition Height= "20* "/>
  16. <RowDefinition Height= "20* "/>
  17. </Grid.RowDefinitions>
  18. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "1 ">
  19. <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 "/>
  20. </Border>
  21. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto ">
  22. <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 "/>
  23. </Border>
  24. <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"/>
  25. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0,0,0,0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "2 ">
  26. <TextBlock TextWrapping = "Wrap " Background= "#FFF9F9F9 " Text="{Binding Path=Content,ElementName=lText}" HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
  27. </Border>
  28. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "3 ">
  29. <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 "/>
  30. </Border>
  31. </Grid>
  32. </Border>
  33. </Grid>
  34. </ControlTemplate>
  35. </Setter.Value>
  36. </Setter>
  37. </Style>

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

一个是绑定自身属性

{Binding MyProperty, RelativeSource={RelativeSource self}}

第二是绑定其他控件属性

{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. Git 在同一台机器上配置多个Git帐号

    在同一台机器上配置多个Git帐号 By:授客 QQ:1033553122 实践环境 win10 Git-2.21.0-64-bit.exe TortoiseGit-2.8.0.0-64bit.msi ...

  2. ionic项目使用Google FCM插件和Google maps插件打包android报错冲突问题

    这段时间在调FCM推送服务的插件 ,原本以为去年调通过,应该很容易,没想到还是出问题了.现将问题及解决方法整理如下,仅供参考: 先看打包报错截图:         详细报错信息:Please fix ...

  3. 内存取证工具-volatility、foremost

    内存取证 1. 内存取证工具volatility 猜测dump文件的profile值 root@kali:~/CTF# volatility -f mem.vmem imageinfo Volatil ...

  4. Python输出16进制不带0x补零,整数转16进制,字符串转16进制

    Python输出16进制不带0x补零,整数转16进制,字符串转16进制   在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多 ...

  5. Maven详解(非原创)

    文章大纲 一.maven功能介绍二.maven整合javaweb案例三.私服应用(了解)四.总结五.相关资料下载六.参考文章 一.maven功能介绍 1. maven基本介绍   Maven的Apac ...

  6. Linux搭建图片服务器减轻传统服务器的压力(nginx+vsftpd)

    传统项目中的图片管理 传统项目中,可以在web项目中添加一个文件夹,来存放上传的图片.例如在工程的根目录WebRoot下创建一个images文件夹.把图片存放在此文件夹中就可以直接使用在工程中引用. ...

  7. Python数据结构性能分析

    1.目标 告诉大家Python列表和字典操作的 大O 性能.然后我们将做一些基于时间的实验来说明每个数据结构的花销和使用这些数据结构的好处 2.实操 在列表的操作有一个非常常见的编程任务就是是增加一个 ...

  8. python模拟进程状态

    python模拟进程状态 我在参考资料中看到了两种实现方式,都做了尝试 代码1 from transitions import Machine class Matter: pass model = M ...

  9. http并发访问模型(2)

    目录 http并发 并发访问模型 响应流程 从IO的角度看待响应 从函数的角度看待响应 日志处理 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网 ...

  10. 洛谷 UVA10226 Hardwood Species

    洛谷 UVA10226 Hardwood Species 洛谷评测传送门 题目描述 PDF 输入格式 输出格式 输入输出样例 输入 #1复制 输出 #1复制 题目翻译: 给定若干字符串,输出格式为:( ...