如何在WPF Datagrid中更改行的样式?

我是WPF的新手,需要帮助在运行时设置数据网格中的特定行或样式,具体取决于存储数据的某些值。 我看到了这个线程,但无法从设计中存在的列中检索出仅存在于运行时的行问题。

任何一个例子都会很乐意接受。 谢谢!

编辑:我也找到了这个post ,但我需要一个C#代码……

我无法从您的问题中判断您是否在运行时向网格添加列,但无论哪种方式,您都可以在设计时将CellStyle添加到网格中,以使用DataTriggers处理您的特定样式需求。

例如,以下将使所有行变为红色,其中Name属性=“Billy Bob”:

     

如果要在运行时以编程方式添加列,并且希望对它们应用某种样式,则仍可以在xaml中的设计时定义这些样式。

      ... 

然后,当您添加列时,可以将该样式应用于它们:

 col.CellStyle = (Style)dataGrid1.Resources("MyCellStyle"); 

更新

如果您有一个歌曲列表,并且您想要更改每首歌曲的行颜色,该歌曲的名称以“a”开头,那么您可以使用IValueConverter。

以下转换器可以解决这个问题:

 public class ArtistNameConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { try { return value.ToString().StartsWith(parameter.ToString()); } catch { return false; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

然后你可以在你的xaml中使用转换器,如下所示:

          

注意我如何将“a”作为参数传递给转换器。 您可以传入您想要的任何字母,并且具有以该字母开头的艺术家的行将其背景颜色设置为红色。

更新2

如果要将某种变量传递给转换器,可以使用MultiBinding。

转换器看起来像这样:

 public class ArtistNameConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { try { return values[0].ToString().StartsWith(values[1].ToString()); } catch { return false; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 

传入的第一个参数是艺术家名称,第二个是字母。

你可以在你的网格中使用它,如下所示:

     

在此示例中,第一个字母来自名为“FirstLetter”的控件的“Text”属性。 您可以将绑定更改为您想要的任何内容。