zoukankan      html  css  js  c++  java
  • wpf dataGrid

    View Code
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:MyWPFCustomControls"
                        xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna"
                        >
        <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <Rectangle x:Name="Border" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" SnapsToDevicePixels="True"/>
                            <Polygon x:Name="Arrow" Fill="Black" HorizontalAlignment="Right" Margin="8,8,3,3" Opacity="0.15" Points="0,10 10,10 10,0" Stretch="Uniform" VerticalAlignment="Bottom"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Stroke" TargetName="Border" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Fill" TargetName="Border" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Visibility" TargetName="Arrow" Value="Collapsed"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style  TargetType="{x:Type local:CustomDataGrid}">
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
            <Setter Property="BorderBrush" Value="#FF688CAF"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
            <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
            <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
            <Setter Property="CellStyle" >
                <Setter.Value>
                    <Style  TargetType="{x:Type DataGridCell}" >
                        <Setter Property="Background" Value="Transparent"/>
                        <Setter Property="BorderBrush" Value="Transparent"/>
                        <Setter Property="BorderThickness" Value="1"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridCell}">
                                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding DataContext.IsSelected,RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
                                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                                <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                            </DataTrigger>
                            <!--<Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>-->
                            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:CustomDataGrid}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                            <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
                                <ScrollViewer.Template>
                                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto"/>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="Auto"/>
                                            </Grid.ColumnDefinitions>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="*"/>
                                                <RowDefinition Height="Auto"/>
                                            </Grid.RowDefinitions>
                                            <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                            <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/>
                                            <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
                                            <Grid Grid.Column="1" Grid.Row="2">
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                                    <ColumnDefinition Width="*"/>
                                                </Grid.ColumnDefinitions>
                                                <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
                                            </Grid>
                                        </Grid>
                                    </ControlTemplate>
                                </ScrollViewer.Template>
                                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
           
                
           
            <Style.Triggers>
                <Trigger Property="IsGrouping" Value="true">
                    <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                </Trigger>
            </Style.Triggers>
        </Style>
        <SolidColorBrush x:Key="{x:Static DataGrid.FocusBorderBrushKey}" Color="#FF000000"/>
        
        <Style x:Key="CustomDataGridCellStyle" TargetType="{x:Type DataGridCell}" >
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding DataContext.IsSelected,RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </DataTrigger>
                <!--<Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>-->
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
            <Setter Property="Width" Value="8"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Cursor" Value="SizeWE"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                        <Grid>
                            <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}" ThemeColor="NormalColor">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Microsoft_Windows_Themes:DataGridHeaderBorder>
                            <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
                            <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <BooleanToVisibilityConverter x:Key="bool2VisibilityConverter"/>
        <Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
            <Setter Property="Height" Value="8"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Cursor" Value="SizeNS"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="DataGridRowHeaderStyle1" TargetType="{x:Type DataGridRowHeader}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
                        <Grid>
                            <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" IsSelected="{TemplateBinding IsRowSelected}" Orientation="Horizontal" Padding="{TemplateBinding Padding}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}" ThemeColor="NormalColor">
                                <StackPanel Orientation="Horizontal">
                                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"  />
                                    <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
                                </StackPanel>
                            </Microsoft_Windows_Themes:DataGridHeaderBorder>
                            
                            <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/>
                            <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/>
                        </Grid>
                    </ControlTemplate>
    
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="1" TargetType="{x:Type DataGridRow}">
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
            <Setter Property="ValidationErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <TextBlock Foreground="Red" Margin="2,0,0,0" Text="!" VerticalAlignment="Center"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridRow}">
                        <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <SelectiveScrollingGrid>
                                <SelectiveScrollingGrid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </SelectiveScrollingGrid.ColumnDefinitions>
                                <SelectiveScrollingGrid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="Auto"/>
                                </SelectiveScrollingGrid.RowDefinitions>
                                <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
                                <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                            </SelectiveScrollingGrid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
    </ResourceDictionary>
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Media;
    
    namespace MyWPFCustomControls
    {
        public class CustomDataGrid : DataGrid
        {
    
            private bool SelectAll;
            private bool IsClicked;
            private bool IsSelectionChanged;
    
            public CustomDataGrid()
            {
                this.CanUserResizeRows = false;
                this.CanUserResizeColumns = false;
                this.SelectionUnit = DataGridSelectionUnit.FullRow;
                this.SelectionChanged += CustomDataGrid_SelectionChanged;
                this.MouseLeftButtonUp += CustomDataGrid_MouseLeftButtonUp;
                this.LoadingRow += CustomDataGrid_LoadingRow;
                IsClicked = true;
                SelectAll = true;
                DataGridTemplateColumn tc = new DataGridTemplateColumn();
                //DataTemplate dt = new DataTemplate();
                tc.CanUserSort = true;
                tc.CanUserResize = false;
                tc.CanUserReorder = false;
                tc.SortMemberPath = "IsSelected";
                
    
                CheckBox cb = new CheckBox() { Margin = new Thickness(8, 0, 0, 0) };
    
                cb.Click += new RoutedEventHandler(cb_Click);
                tc.Header = cb;
    
    
                DataTemplate dt1 = new DataTemplate();
    
                FrameworkElementFactory fef1 = new FrameworkElementFactory(typeof(CheckBox));
    
                Binding binding1 = new Binding();
                binding1.Path = new PropertyPath("IsSelected");
                binding1.Mode = BindingMode.TwoWay;
                binding1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    
                fef1.SetBinding(CheckBox.IsCheckedProperty, binding1);
                fef1.SetValue(CheckBox.MarginProperty, new Thickness(10, 0, 0, 0));
                //fef1.SetValue(CheckBox.NameProperty, "cBoxSelected");
    
                fef1.AddHandler(CheckBox.ClickEvent, (RoutedEventHandler)cBoxSelected_Click_1, true);
    
                dt1.VisualTree = fef1;
    
                tc.CellTemplate = dt1;
               
                this.Columns.Add(tc);
    
            }
    
    
            static CustomDataGrid()
            {
                //  DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomDataGrid), new FrameworkPropertyMetadata(typeof(CustomDataGrid)));
            }
    
    
            void CustomDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
            {
                string index =( e.Row.GetIndex() + 1)+"";
                Grid g = new Grid() { Width=25,VerticalAlignment=VerticalAlignment.Stretch,HorizontalAlignment=HorizontalAlignment.Stretch,Background=new SolidColorBrush(Colors.Red) };
    
                g.PreviewMouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(g_PreviewMouseLeftButtonDown);
                TextBlock t = new TextBlock() { Text = index,Margin=new Thickness(10,0,0,0), VerticalAlignment = VerticalAlignment.Stretch,HorizontalAlignment=HorizontalAlignment.Stretch};
               // t.PreviewMouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(t_PreviewMouseLeftButtonDown);
                g.Children.Add(t);
    
                e.Row.Header = g;
    
                
            }
    
            void t_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                
            }
    
            void g_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                this.SelectedItem = null;
                IsClicked = false;
            }
    
            
    
            
            void cb_Click(object sender, RoutedEventArgs e)
            {
                CheckBox cb = sender as CheckBox;
                DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                CheckBox header = tempColumn.Header as CheckBox;
    
    
                foreach (var item in this.Items)
                {
                    if (item.GetType().GetProperty("IsSelected") != null)
                    {
                        if (cb.IsChecked.GetValueOrDefault())
                        {
                            item.GetType().GetProperty("IsSelected").SetValue(item, true, null);
                        }
                        else
                        {
                            item.GetType().GetProperty("IsSelected").SetValue(item, false, null);
                        }
    
                    }
    
    
                }
    
    
    
    
            }
    
            void CustomDataGrid_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                if (!IsSelectionChanged)
                {
                    //foreach (var item in dataGrid1.SelectedItems)
                    //{
    
                    int count = this.SelectedItems.Count;
                    if (count > 1)
                    {
                        foreach (var item in this.SelectedItems)
                        {
                            if (item != null)
                            {
                                if (item.GetType().GetProperty("IsSelected") != null)
                                {
                                    if ((bool)item.GetType().GetProperty("IsSelected").GetValue(item, null))
                                    {
                                        item.GetType().GetProperty("IsSelected").SetValue(item, SelectAll, null);
    
                                        DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                                        CheckBox header = tempColumn.Header as CheckBox;
                                        header.IsChecked = false;
                                    }
                                    else
                                    {
                                        item.GetType().GetProperty("IsSelected").SetValue(item, SelectAll, null);
                                        CheckIsCheckedAll();
                                    }
    
                                }
                                //DataGridTemplateColumn templeColumn = this.Columns[0] as DataGridTemplateColumn;
                                //FrameworkElement fwElement = this.Columns[0].GetCellContent(item);
                                //CheckBox objChk = templeColumn.CellTemplate.FindName("cBoxSelected", fwElement) as CheckBox;
    
                                //objChk.IsChecked = SelectAll;
                                //if (!SelectAll)
                                //{
                                //    this.SelectedItem = null;
                                //}
    
                            }
    
                        }
                        if (SelectAll)
                        {
    
                            SelectAll = false;
                        }
                        else
                        {
                            SelectAll = true;
                        }
                        IsClicked = true;
                    }
                    else
                    {
                        var item = this.SelectedItem;
                        if (item != null)
                        {
                            if (item.GetType().GetProperty("IsSelected") != null)
                            {
                                if ((bool)item.GetType().GetProperty("IsSelected").GetValue(item, null))
                                {
                                    item.GetType().GetProperty("IsSelected").SetValue(item, false, null);
                                    this.SelectedItem = null;
                                    item.GetType().GetProperty("IsSelected").SetValue(item, false, null);
                                    DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                                    CheckBox header = tempColumn.Header as CheckBox;
                                    header.IsChecked = false;
                                }
                                else
                                {
                                    item.GetType().GetProperty("IsSelected").SetValue(item, true, null);
                                    CheckIsCheckedAll();
                                }
    
                            }
    
                            IsClicked = true;
                        }
                    }
    
    
                    //    //}
                }
                else
                {
                    IsSelectionChanged = false;
    
                }
            }
    
    
    
    
            private void cBoxSelected_Click_1(object sender, RoutedEventArgs e)
            {
                // IsSelectionChanged = true;
                CheckBox cb = sender as CheckBox;
                if (cb.IsChecked.GetValueOrDefault())
                {
                    CheckIsCheckedAll();
    
                }
                else
                {
                    DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                    CheckBox header = tempColumn.Header as CheckBox;
                    header.IsChecked = false;
                    this.SelectedItem = null;
                }
    
                IsClicked = true;
    
            }
            void CustomDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (!IsClicked)
                {
    
                    var item = this.SelectedItem;
                    if (item != null)
                    {
    
                        if (item.GetType().GetProperty("IsSelected") != null)
                        {
                            if ((bool)item.GetType().GetProperty("IsSelected").GetValue(item, null))
                            {
                                item.GetType().GetProperty("IsSelected").SetValue(item, false, null);
                                DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                                CheckBox header = tempColumn.Header as CheckBox;
                                header.IsChecked = false;
    
                            }
                            else
                            {
                                item.GetType().GetProperty("IsSelected").SetValue(item, true, null);
                                CheckIsCheckedAll();
                            }
    
                        }
                        //DataGridTemplateColumn templeColumn = this.Columns[0] as DataGridTemplateColumn;
    
                        //FrameworkElement fwElement = this.Columns[0].GetCellContent(item);
    
                        //CheckBox objChk = templeColumn.CellTemplate.FindName("cBoxSelected", fwElement) as CheckBox;
    
                        //if (objChk.IsChecked == true)
                        //{
                        //    objChk.IsChecked = false;
                        //}
                        //else
                        //    objChk.IsChecked = true;
    
                        IsSelectionChanged = true;
                    }
    
                }
                else
                {
                    IsClicked = false;
                }
            }
    
            private void CheckIsCheckedAll()
            {
                int count = 0;
                foreach (var item in this.Items)
                {
                    if (item.GetType().GetProperty("IsSelected") != null && ((bool)(item.GetType().GetProperty("IsSelected").GetValue(item, null))) == true)
                    {
                        count++;
                    }
    
                }
                if (count == Items.Count)
                {
                    DataGridTemplateColumn tempColumn = this.Columns[0] as DataGridTemplateColumn;
    
                    CheckBox header = tempColumn.Header as CheckBox;
                    header.IsChecked = true;
                }
            }
    
        }
    }
  • 相关阅读:
    算法:POJ1008 Maya Calendar
    给我的十八岁
    算法:POJ1007 DNA sorting
    算法:POJ1006 三重峰值问题
    【树链剖分】洛谷P3384树剖模板
    【树链剖分】洛谷P3379 树链剖分求LCA
    【Tarjan缩点】PO3352 Road Construction
    【Dijkstra堆优化】洛谷P2243电路维修
    【Tarjan缩点】POJ2186 Popular Cows
    【最短路·差分约束】洛谷P1250
  • 原文地址:https://www.cnblogs.com/FaDeKongJian/p/3025328.html
Copyright © 2011-2022 走看看