Silverlight DataGrid行背景分组着色

时间:2022-04-09 16:17:49

 利用Silverlight DataGrid LoadingRow事件传入参数DataGridRowEventArgs

我们可以获取到Row对象She之其背景。

下面是一个简单示例

C#

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  SilverlightApplication1
{
    
public   partial   class  MainPage : UserControl
    {
        
public  MainPage()
        {
            InitializeComponent();
        }

        List
< SourceModel >  gridSources  =   new  List < SourceModel > ();

        
private   void  UserControl_Loaded( object  sender, RoutedEventArgs e)
        {
        }

        
private   void  LoadSource( int  n)
        {
            
if  (n  <   1 )
                
throw   new  Exception( " should >=1 " );
            gridSources.Clear();
            
for  ( int  i  =   0 ; i  <  n; i ++ )
            {
                gridSources.Add(
new  SourceModel() { ID  =  i.ToString(), Name  =   " test "   +  i, Group  =  (( int )( new  Random().NextDouble()  *  i)).ToString() });
            }

            
int  j  =   0 ;
            gridSources 
=  gridSources.OrderBy(t  =>  t.Group).ToList();
            gridSources.GroupBy(t 
=>  t.Group).ToList().ForEach(t  =>
            {
                t.ToList().ForEach(k 
=>  k.BG  =  brushs[j  %  brushs.Length]);
                j
++ ;
            });
        }
        Brush[] brushs 
=   new  Brush[] {  new  SolidColorBrush(Color.FromArgb( 128 135 206 235 )),  new  SolidColorBrush(Color.FromArgb( 255 240 255 240 )),  new  SolidColorBrush(Color.FromArgb( 140 255 97 0 )) };
        
private   void  test1_Click( object  sender, RoutedEventArgs e)
        {
            dgSource.ItemsSource 
=  gridSources;
        }

         private   void  test2_Click( object  sender, RoutedEventArgs e)
        {

        }

        
private   void  LoadSource_Click( object  sender, RoutedEventArgs e)
        {
            LoadSource(
int .Parse( this .maxCount.Text));
        }

        
private   void  dgSource_LoadingRow( object  sender, DataGridRowEventArgs e)
        {
            e.Row.Background 
=  (e.Row.DataContext  as  SourceModel).BG;
        }
    }

    
public   class  SourceModel
    {
        
public   string  ID {  get set ; }
        
public   string  Name {  get set ; }
        
public   string  Group {  get set ; }
        
public  Brush BG {  get set ; }
    }

}

XAMl:

< UserControl  x:Class ="SilverlightApplication1.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d"
             xmlns:data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
    d:DesignHeight
="300"  d:DesignWidth ="400"
             xmlns:i
="http://schemas.microsoft.com/expression/2010/interactivity"
     xmlns:sdk
="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"    
             xmlns:Test
="clr-namespace:SilverlightApplication1;assembly=SilverlightApplication1" >
    
< Grid  x:Name ="LayoutRoot" >
        
< Grid.RowDefinitions >
            
< RowDefinition  ></ RowDefinition >
            
< RowDefinition  Height ="26"   ></ RowDefinition >
        
</ Grid.RowDefinitions >
        
< data:DataGrid  Grid.Row ="0"  x:Name ="dgSource"  Margin ="3,3,3,3"  RowBackground ="Black"  AutoGenerateColumns ="False"  LoadingRow ="dgSource_LoadingRow"   >
            
< data:DataGrid.Columns >
                
< data:DataGridTextColumn  Header ="ID"  Binding =" {Binding ID} "  IsReadOnly ="True"   />
                
< data:DataGridTextColumn  Header ="Name"  Binding =" {Binding Name,Mode=TwoWay} "   />
                
< data:DataGridTextColumn  Header ="Group"  Binding =" {Binding Group,Mode=TwoWay} "   />
                
                
< data:DataGridTextColumn  Header ="ID"  Binding =" {Binding ID} "  IsReadOnly ="True"   />
                
< data:DataGridTextColumn  Header ="Name"  Binding =" {Binding Name,Mode=TwoWay} "   />
                
< data:DataGridTextColumn  Header ="Group"  Binding =" {Binding Group,Mode=TwoWay} "   />
                
                
< data:DataGridTextColumn  Header ="ID"  Binding =" {Binding ID} "  IsReadOnly ="True"   />
                
< data:DataGridTextColumn  Header ="Name"  Binding =" {Binding Name,Mode=TwoWay} "   />
                
< data:DataGridTextColumn  Header ="Group"  Binding =" {Binding Group,Mode=TwoWay} "   />
            
</ data:DataGrid.Columns >             
        
</ data:DataGrid >
        
< StackPanel  Orientation ="Horizontal"  Grid.Row ="1" >
            
< TextBox  x:Name ="maxCount"  Width ="300"  Text ="100000" ></ TextBox >
            
< Button  x:Name ="loadSource1"  Click ="LoadSource_Click"  Content ="Load Source"   />
            
< Button  x:Name ="test1"  Click ="test1_Click"  Content ="Test bind"   />
            
< Button   x:Name ="test2"   Click ="test2_Click"  Content ="Test 2" />
        
</ StackPanel >
    
</ Grid >
</ UserControl >