【问题标题】:animate the cell of a datagrid in WPF when some condition is True?当某些条件为真时,在 WPF 中为数据网格的单元格设置动画?
【发布时间】:2012-11-25 13:07:03
【问题描述】:

我目前正在研究 datagrid-WPF,它显示来自数据库的表。 该表将有关学生结果的信息显示为通过和失败。 现在我想将 datagrid-cell 上的单元格设置为动画 PASS 为绿色,Fail 为红色。

如何在 c# 和 XAML 中实现这一点? 谢谢。

【问题讨论】:

    标签: c# wpf xaml wpfdatagrid


    【解决方案1】:

    你可以使用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 的属性。

    希望对你有所帮助。

    最好的。

    【讨论】:

      【解决方案2】:

      使用样式和转换器

       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>
      

      【讨论】:

      • 非常感谢。我有一个包括 CultureInfo 文化的问题,我的 Intellisense 只接受 CultureInfoIetfLanguageTagConverter 文化。这就产生了一个问题。我已经包含了 System.Globalization.CultureInfo。但我仍然面临这个问题。
      • 我不确定你的意思 - 请你能更具体地谈谈这个问题吗?
      • 如果是智能感知问题,请执行以下操作 删除此文件夹中的文件:%AppData%\Roaming\Microsoft\VisualStudio\10.0\ReflectedSchemas vs2010 %AppData%\Roaming\Microsoft\VisualStudio\11.0 \ReflectedSchemas vs2012
      • 我这里有问题 它说找不到 myApp 类型,缺少引用或命名空间。
      • 好的,您为转换器编写的类的命名空间是什么?您需要 只需将 myNameSpace、YourConverterClassName 和 WhatYouWantToCallTheKey 替换为您本地应用程序中的任何内容。我认为我应该在这个上获得更多投票;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多