【发布时间】:2012-11-25 13:07:03
【问题描述】:
我目前正在研究 datagrid-WPF,它显示来自数据库的表。 该表将有关学生结果的信息显示为通过和失败。 现在我想将 datagrid-cell 上的单元格设置为动画 PASS 为绿色,Fail 为红色。
如何在 c# 和 XAML 中实现这一点? 谢谢。
【问题讨论】:
标签: c# wpf xaml wpfdatagrid
我目前正在研究 datagrid-WPF,它显示来自数据库的表。 该表将有关学生结果的信息显示为通过和失败。 现在我想将 datagrid-cell 上的单元格设置为动画 PASS 为绿色,Fail 为红色。
如何在 c# 和 XAML 中实现这一点? 谢谢。
【问题讨论】:
标签: c# wpf xaml wpfdatagrid
你可以使用DataGridTemplateColumn ..
举个例子..
<DataGridTemplateColumn CellStyle="{StaticResource CenterAlignCell}" Header="Result" IsReadOnly="True" Width="*" Visibility="Visible" CanUserResize="True" SortMemberPath="GAIN_AT_POSITION" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Background="{Binding GainHighlight}">
<TextBlock Text="{Binding GAIN_AT_POSITION, StringFormat=N2}" Foreground="{Binding GainForeGround}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ps:GainHighlight 是我的 Class 中用于绑定 UI 的属性。
希望对你有所帮助。
最好的。
【讨论】:
使用样式和转换器
public class SomeConverter: IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
string cellValue = value.ToString();
return cellValue == "PASS";
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return false;
}
}
<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="False">
<DataGrid.Resources>
<myApp:SomeConverter
x:Key="SomeConverter">
</myApp:SomeConverter>
<Style TargetType="DataGridCell" x:Key="FlashStyle">
<Style.Triggers>
<DataTrigger
Binding="{Binding Col1,
Converter={StaticResource SomeConverter}}"
Value="True" >
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard
x:Name="Blink"
AutoReverse="True"
RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames
BeginTime="00:00:00"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame
KeyTime="00:00:01"
Value="Green" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Col1}"
CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
<DataGridTextColumn
Binding="{Binding Col2}"></DataGridTextColumn>
</DataGrid.Columns>
并在 xaml 中为 value = false 包含第二个数据触发器并触发红色
并将样式添加到数据网格列
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding SomeCol}"
CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
<DataGridTextColumn
Binding="{Binding AnotherCol}"
CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
【讨论】: