Điều đầu tiên trước tiên, đừng làm điều này trong mã sau. Bạn đang chiến đấu với khung làm việc theo cách này. WPF được thiết kế khác nhau; bạn phải suy nghĩ về cách mà khung làm việc muốn bạn làm mọi thứ. Trong trường hợp của WPF, đó là đánh dấu XAML + các lớp chuyển đổi.
Bạn cần hai điều để đạt được những gì bạn muốn:
- markup XAML thích hợp để thiết lập phong cách của DataGrid
- thực hiện Một IValueConverter để dịch các giá trị của văn bản sang màu nổi bật thích hợp.
đây đi:
XAML Trong DataGrid của bạn
Điều đầu tiên bạn muốn làm là xác định XAML cần thiết để tạo kiểu tế bào DataGrid của bạn. Nó trông giống như thế này:
<toolkit:DataGrid.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Setters>
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource dataGridCellConverter}}" />
</Style.Setters>
</Style>
</toolkit:DataGrid.CellStyle>
Điều này đang làm là thiết lập một liên kết với các RelativeSource (các DataGridCell) và nói cho nó để sử dụng Content.Text của tế bào như giá trị để vượt qua các Converter (dataGridCellConverter).
IValueConverter
Điều tiếp theo bạn cần là một thực hiện IValueConverter để thực sự xác định màu sắc dựa trên văn bản của tế bào:
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace UserControls.Utility.Converters
{
public class DataGridCellConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return Colors.White.ToString();
if (value.ToString().ToUpper().Contains("CMS")) return "LIME";
return "ORANGE";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Ở đây, tôi chỉ tìm kiếm các văn bản "CMS" và tô màu ô nền; nếu "CMS" không tồn tại, thì nó sẽ trả về màu cam thay thế.
Chỉ định Tài
Bây giờ, bạn cần phải thêm đánh dấu trong cửa sổ của bạn/usercontrol để xác định chuyển đổi như một nguồn tài nguyên thích hợp:
<UserControl.Resources>
<Converters:DataGridCellConverter x:Key="dataGridCellConverter"/>
</UserControl.Resources>
Và rằng nên làm điều đó! Chúc may mắn.
+1 - câu trả lời rất chi tiết – David
'Trong trường hợp của WPF, đó là đánh dấu XAML + các lớp chuyển đổi.' - đây là nhận thức cá nhân của riêng bạn –