当前位置:   article > 正文

WPF中使用DataGrid封装组合控件TreeView+DataGrid-粉丝专栏_wpf treegridview

wpf treegridview

        wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。

我们需要的效果如图所示:

这2个图都是第三方控件自带的,并且都是收费使用。

现在我们就用原生的控件进行封装一个。

本文源码效果截图,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)

功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。

首先说明一下,实现上面的效果,有3种方法

第一种:技术的选择是TreeView

WPF中使用TreeView封装组合控件TreeView+DataGrid-粉丝专栏-CSDN博客

第二种:技术的选择是DataGrid(也就是本文的演示)。

第三种:技术的选择是ListView。

WPF中使用ListView封装组合控件TreeView+DataGrid-粉丝专栏-CSDN博客

本文演示的是DataGrid的实现。

1.首先建立一个wpf程序

2.封装TreeDataGrid.cs

  1. namespace DataGrid.TreeDataGrid
  2. {
  3. using System.Windows;
  4. //把引用写在里面
  5. using System.Windows.Controls;
  6. public class TreeDataGrid : DataGrid
  7. {
  8. protected override DependencyObject GetContainerForItemOverride()
  9. {
  10. return new TreeDataGridRow();
  11. }
  12. protected override bool IsItemItsOwnContainerOverride(object item)
  13. {
  14. return item is TreeDataGridRow;
  15. }
  16. }
  17. public class TreeDataGridRow : DataGridRow
  18. {
  19. }
  20. }

3.DataGridStyle.xaml

  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:local="clr-namespace:DataGrid.TreeDataGrid"
  4. >
  5. <!--DataGrid样式-->
  6. <Style TargetType="{x:Type local:TreeDataGrid}">
  7. <!--网格线颜色-->
  8. <Setter Property="CanUserResizeColumns" Value="false"/>
  9. <Setter Property="Background" Value="#FFF7EDAD" />
  10. <Setter Property="BorderBrush" Value="#FFF5F7F5" />
  11. <Setter Property="HorizontalGridLinesBrush">
  12. <Setter.Value>
  13. <SolidColorBrush Color="#d6c79b"/>
  14. </Setter.Value>
  15. </Setter>
  16. <Setter Property="VerticalGridLinesBrush">
  17. <Setter.Value>
  18. <SolidColorBrush Color="#d6c79b"/>
  19. </Setter.Value>
  20. </Setter>
  21. </Style>
  22. <!--标题栏样式 DataGridColumnHeader-->
  23. <Style TargetType="DataGridColumnHeader" >
  24. <Setter Property="SnapsToDevicePixels" Value="True" />
  25. <Setter Property="MinWidth" Value="0" />
  26. <Setter Property="MinHeight" Value="28" />
  27. <Setter Property="Foreground" Value="#323433" />
  28. <Setter Property="FontSize" Value="14" />
  29. <Setter Property="FontWeight" Value="Bold" />
  30. <Setter Property="Cursor" Value="Hand" />
  31. <Setter Property="Template">
  32. <Setter.Value>
  33. <ControlTemplate TargetType="DataGridColumnHeader">
  34. <Border x:Name="BackgroundBorder" BorderThickness="0,1,0,1"
  35. BorderBrush="#e6dbba"
  36. Width="Auto">
  37. <Grid >
  38. <Grid.ColumnDefinitions>
  39. <ColumnDefinition Width="*" />
  40. </Grid.ColumnDefinitions>
  41. <ContentPresenter Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
  42. <Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Grid.Column="2" Width="8" Height="6" Fill="White" Margin="0,0,50,0"
  43. VerticalAlignment="Center" RenderTransformOrigin="1,1" />
  44. <Rectangle Width="1" Fill="#d6c79b" HorizontalAlignment="Right" Grid.ColumnSpan="1" />
  45. </Grid>
  46. </Border>
  47. </ControlTemplate>
  48. </Setter.Value>
  49. </Setter>
  50. <Setter Property="Height" Value="25"/>
  51. </Style>
  52. <!--行样式触发-->
  53. <!--背景色改变必须先设置cellStyle 因为cellStyle会覆盖rowStyle样式-->
  54. <Style TargetType="local:TreeDataGridRow">
  55. <Setter Property="Margin" Value="0"/>
  56. <Setter Property="Padding" Value="0"/>
  57. <Style.Triggers>
  58. <DataTrigger Binding="{Binding IsVisible}" Value="False">
  59. <Setter Property="Visibility" Value="Collapsed"/>
  60. </DataTrigger>
  61. <Trigger Property="AlternationIndex" Value="0" >
  62. <Setter Property="Background" Value="#e7e7e7" />
  63. </Trigger>
  64. <Trigger Property="AlternationIndex" Value="1" >
  65. <Setter Property="Background" Value="#f2f2f2" />
  66. </Trigger>
  67. <Trigger Property="IsMouseOver" Value="True">
  68. <Setter Property="Background" Value="Red"/>
  69. <!--<Setter Property="Foreground" Value="White"/>-->
  70. </Trigger>
  71. <Trigger Property="IsSelected" Value="True">
  72. <Setter Property="Background" Value="YellowGreen"/>
  73. </Trigger>
  74. </Style.Triggers>
  75. </Style>
  76. <!--单元格样式触发-->
  77. <Style TargetType="DataGridCell">
  78. <Setter Property="Template">
  79. <Setter.Value>
  80. <ControlTemplate TargetType="DataGridCell">
  81. <TextBlock VerticalAlignment="Center" >
  82. <ContentPresenter />
  83. </TextBlock>
  84. </ControlTemplate>
  85. </Setter.Value>
  86. </Setter>
  87. <Style.Triggers>
  88. <Trigger Property="IsSelected" Value="True">
  89. <Setter Property="Foreground" Value="Red"/>
  90. </Trigger>
  91. </Style.Triggers>
  92. </Style>
  93. </ResourceDictionary>

4.最终源码实例

 源码地址:

https://download.csdn.net/download/u012563853/89003279

本文来源:

WPF中使用DataGrid封装组合控件TreeView+DataGrid-粉丝专栏-CSDN博客

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读