利用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;
}
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 >
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 >