在DataGrid中粗体更改了单元格

时间:2012-10-22 01:21:53

标签: wpf mvvm wpfdatagrid eventtrigger

我想在数据源更新时大胆更改DataGrid个单元格。我发现<EventTrigger RoutedEvent="Binding.TargetUpdated">是我需要的事件。但是,我无法让Storyboard使用FontWeight属性。

以下是我的尝试:

<EventTrigger RoutedEvent="Binding.TargetUpdated">
    <BeginStoryboard>
        <Storyboard>
            <Int32Animation Duration="00:00:05" 
                Storyboard.TargetProperty="(Int32)(DataGridCell.FontWeight)"  
                From="400" To="700" />
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>

有人可以建议如何解决上述问题,或者在DataGrid中提出更明智的方法来更改已更改的单元格吗?

1 个答案:

答案 0 :(得分:1)

这对我有用......

我有资源......

   <Style TargetType="TextBlock" x:Key="ElementStyle">
       <Style.Triggers>
           <EventTrigger RoutedEvent="Binding.TargetUpdated">
                <BeginStoryboard>
                   <Storyboard>
                      <ObjectAnimationUsingKeyFrames
                          Duration="00:00:01"
                          Storyboard.TargetProperty="(TextElement.FontWeight)">
                             <DiscreteObjectKeyFrame 
                                KeyTime="00:00:00" 
                                Value="{x:Static FontWeights.Thin}" />
                             <DiscreteObjectKeyFrame 
                                KeyTime="00:00:00.5" 
                                Value="{x:Static FontWeights.Heavy}" />
                             <DiscreteObjectKeyFrame 
                                KeyTime="00:00:01" 
                                Value="{x:Static FontWeights.UltraBold}" />
                           </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                     </BeginStoryboard>                                
               </EventTrigger>
         </Style.Triggers>
  </Style>

将此内容分配给相关列

  <toolkit:DataGridTextColumn 
        Binding="{Binding Quantity, NotifyOnTargetUpdated=True}" 
                          ElementStyle="{StaticResource ElementStyle}" />

修改

由于上面的代码使默认值也变为Bold,我们还有另一种方法可以做到这一点,其中只有用户完成的更新才会触发单元格中的粗体。

<强>风格

  <Style TargetType="Controls:DataGridCell" 
   BasedOn="{StaticResource {x:Type Controls:DataGridCell}}" 
   x:Key="CellBoldStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Binding.SourceUpdated">
    <BeginStoryboard>
        <Storyboard>
        <ObjectAnimationUsingKeyFrames
            Duration="00:00:01"                                 Storyboard.TargetProperty
                                    ="(TextBlock.FontWeight)">
            <DiscreteObjectKeyFrame KeyTime="00:00:00.5" 
                                Value="{x:Static FontWeights.Normal}" />
            <DiscreteObjectKeyFrame KeyTime="00:00:01" 
                                Value="{x:Static FontWeights.Bold}" />
        </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>
    </EventTrigger>
</Style.Triggers>
  </Style>

<强>列

  <Controls:DataGridTextColumn 
             Binding="{Binding Side, Mode=TwoWay, 
                               NotifyOnTargetUpdated=True, 
                               NotifyOnSourceUpdated=True}" 
             CellStyle="{StaticResource CellBoldStyle}" />

<强>限制

  1. 当您将滚动视图滚动到滚动视图中时,虚拟化单元格会松开粗体突出显示的效果。
  2. 即使您的TextBox显示粗体值。 (我不知道这对你来说是否有限制!)