利用Silverlight DataGrid LoadingRow事件传入参数DataGridRowEventArgs
我们可以获取到Row对象She之其背景。
下面是一个简单示例
C# :
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>
- 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; }
- }
- }