Silverlight DataGrid行背景分组着色
2011-07-28 15:30 破狼 阅读(2715) 评论(1) 编辑 收藏 举报利用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>
作者:破 狼
出处:http://www.cnblogs.com/whitewolf/
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客、博客园--破狼和51CTO--破狼。