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