WPF DataGrid 改變單元格字體顏色或單元格背景顏色(一)


我是把博文當記事本的地方……

WPF DataGrid 改變單元格字體顏色或單元格背景顏色(一)

第一種方法,指定 DataGrid 里單元格的值是否符合用戶自定義的條件,如果不,改變指定的顏色:

前台XAML代碼:

<Window x:Class="WpfDataGridCellColors.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loca="clr-namespace:WpfDataGridCellColors"
Title="MainWindow" Height="261" Width="649">

<Window.Resources>
<loca:ColorConverter x:Key="MyColorConvert"/>
</Window.Resources>

<Grid>
<DataGrid x:Name="dataGrid"
CanUserDeleteRows="False" CanUserAddRows="False"
AutoGenerateColumns="False" IsReadOnly="True"
Background="White" GridLinesVisibility="All" Margin="5"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
HeadersVisibility="Column" AlternationCount="2">

<DataGrid.Columns>

<DataGridTextColumn Binding="{Binding Title}" Header="項目" Width="150"/>

<DataGridTemplateColumn Width="150" >
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="A" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IA}" VerticalAlignment="Center"
HorizontalAlignment="Center" Foreground="{Binding IA,Converter={StaticResource MyColorConvert}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

</DataGridTemplateColumn>

<DataGridTemplateColumn Width="150" >
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="B"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IB}" VerticalAlignment="Center"
HorizontalAlignment="Center" Foreground="{Binding IB,Converter={StaticResource MyColorConvert}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

</DataGridTemplateColumn>

<DataGridTemplateColumn Width="150" >
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="C" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IC}" VerticalAlignment="Center"
HorizontalAlignment="Center" Foreground="{Binding IC,Converter={StaticResource MyColorConvert}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

</DataGrid.Columns>

</DataGrid>
</Grid>
</Window>

這里要注意的是定義DataGrid的列模板,首先是列標題模塊:

<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="A" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

然后是列的單元格模板:

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding IA}" VerticalAlignment="Center"
HorizontalAlignment="Center" Foreground="{Binding IA,Converter={StaticResource MyColorConvert}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

這里的Foreground綁定后台生成的值 IA ,當IA符合用戶定義的一些條件后,改變顏色。

條件判斷與顏色轉變在下面的IValueConverter類中。

(如果要改變單元格的背景顏色,只需把前台XAML中的Foreground改為Background即可)

后台代碼:

namespace WpfDataGridCellColors
{
/// <summary>
/// MainWindow.xaml 的交互邏輯
/// </summary>
public partial class MainWindow : Window
{
private List<Contrasts> _ContrastList;
public List<Contrasts> ContrastList
{
get { return _ContrastList; }
set
{
_ContrastList = value;
}
}

public MainWindow()
{
InitializeComponent();

ContrastList = new List<Contrasts>();

ContrastList.Add(new Contrasts()
{
Title = "減數",
IA = 110,
AFColor = Brushes.Black,
IB = 220,
BFColor = Brushes.Black,
IC = 330,
CFColor = Brushes.Green
});

dataGrid.ItemsSource = ContrastList;
}
}

public class Contrasts
{
private string _Title;
public string Title
{
get { return _Title; }
set { _Title = value; }
}

private double _IA;
public double IA
{
get { return _IA; }
set { _IA = value; }
}

private double _IB;
public double IB
{
get { return _IB; }
set { _IB = value; }
}

private double _IC;
public double IC
{
get { return _IC; }
set { _IC = value; }
}

private SolidColorBrush _AFColor;
public SolidColorBrush AFColor
{
get { return _AFColor; }
set { _AFColor = value; }
}

private SolidColorBrush _BFColor;
public SolidColorBrush BFColor
{
get { return _BFColor; }
set { _BFColor = value; }
}

private SolidColorBrush _CFColor;
public SolidColorBrush CFColor
{
get { return _CFColor; }
set { _CFColor = value; }
}
}
}

IValueConverter類:

using System;
using System.Collections.Generic;
using System.Windows.Data;
using System.Windows;

namespace WpfDataGridCellColors
{
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type typeTarget, object param, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return "Black";
}

if (System.Convert.ToDouble(value) >= 100.0 && System.Convert.ToDouble(value) < 200)
{
return "Black";
}

if (System.Convert.ToDouble(value) >= 200.0 && System.Convert.ToDouble(value) < 300)
{
return "Green";
}

if (System.Convert.ToDouble(value) >= 300.0)
{
return "Red";
}

return "Black";
}
public object ConvertBack(object value, Type typeTarget, object param, System.Globalization.CultureInfo culture)
{
return "";
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM