1

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?

4

1 に答える 1

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}" />

編集

上記のコードはデフォルト値も太字にするため、これを行う別の方法があり、ユーザーが行った更新のみがセルの太字をトリガーします。

スタイル

  <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 でも Bold value が表示されます。(これがあなたにとっての制限かどうかはわかりません!)
于 2012-10-22T07:41:19.950 に答える