Silverlight DataGrid行背景分组着色

根据条件让特定的行背景着色写了几天都没找到好的办法,都是拖动滚动条之后才变色,很是头疼,终于找到一个简单方法

e.Row.Background = (e.Row.DataContext as SourceModel).BG;

 非常感谢作者分享!

--------------------------------------------------------------源码--------------------------------------------------------------

贴上源代码:

 

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>

 


作者:破 狼
出处:http://www.cnblogs.com/whitewolf/
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-博客园--破狼51CTO--破狼

 

转载链接:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值