Sef*_*fix 4 c# wpf wpfdatagrid
我是WPF的新手,需要帮助在运行时设置数据网格中的特定行或样式,具体取决于存储数据的某些值.我看到了这个线程,但无法从设计中存在的列中检索出仅存在于运行时的行问题.
任何一个例子都会很乐意接受.谢谢!
编辑:我也找到了这个帖子,但我需要一个C#代码......
kev*_*v22 19
我无法从您的问题中判断您是否在运行时向网格添加列,但无论哪种方式,您都可以在设计时将CellStyle添加到网格中,以使用DataTriggers处理您的特定样式需求.
例如,以下将使所有行变为红色,其中Name属性="Billy Bob":
<DataGrid AutoGenerateColumns="True" Name="dataGrid1">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Name}" Value="Billy Bob" >
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
如果要在运行时以编程方式添加列,并且希望将某种样式应用于它们,则仍可以在xaml中的设计时定义这些样式.
<DataGrid AutoGenerateColumns="False" Name="dataGrid1">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}" x:Key="MyCellStyle">
<Setter Property="Foreground" Value="Green"/>
</Style>
</DataGrid.Resources>
...
Run Code Online (Sandbox Code Playgroud)
然后,当您添加列时,可以将该样式应用于它们:
col.CellStyle = (Style)dataGrid1.Resources("MyCellStyle");
Run Code Online (Sandbox Code Playgroud)
更新
如果您有一个歌曲列表,并且想要更改每首歌曲的行颜色,而该歌曲的名称以"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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的xaml中使用转换器,如下所示:
<DataGrid AutoGenerateColumns="True" Name="dataGrid1">
<DataGrid.Resources>
<converters:ArtistNameConverter x:Key="ArtistNameConverter"></converters:ArtistNameConverter>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding ArtistName, Converter={StaticResource ArtistNameConverter}, ConverterParameter=a}" Value="True" >
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
注意我如何将"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();
}
}
Run Code Online (Sandbox Code Playgroud)
传入的第一个参数是艺术家名称,第二个是字母.
你会在你的网格中使用它,如下所示:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Value="True" >
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource ArtistNameConverter}">
<Binding Path="ArtistName" />
<Binding Mode="OneWay" ElementName="FirstLetter" Path="Text" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
Run Code Online (Sandbox Code Playgroud)
在此示例中,第一个字母来自名为"FirstLetter"的控件的"Text"属性.您可以将绑定更改为您想要的任何内容.
| 归档时间: |
|
| 查看次数: |
19437 次 |
| 最近记录: |