2

私は解決策を探し続けてきましたが、うまくいくものは何も見つかりませんでした。

問題は単純です:

  • DataGrid(読み取り専用)はオブジェクトのコレクションにバインドされます(INotifyPropertyChangedを実装します)
  • データオブジェクトの特定のプロパティが変更されると、セルの背景がアニメーション化されます(たとえば、赤から透明に)

EventTrigger(TargetUpdated)でスタイルを使用してストーリーボードを開始しようとしましたが、副作用があり、DataGridが最初に入力されたとき、およびスクロールまたは再ソートされたときにすべてのセルの背景がアニメーション化されます。

他にも同様の質問がいくつかあることは知っていますが、実用的な解決策は見つかりませんでした。
誰かがこれを達成することができましたか?コードビハインドを使用したくないのですが、必要に応じて、コードビハインドを使用します...

編集:
私が達成しようとしていることに関していくつかの混乱があることに気づきました:
セル(およびデータオブジェクトの基礎となるプロパティ)の値が「A」であるとしましょう。ある時点で「B」に変わります(サーバーからの更新など)。この時点で、背景は「点滅」するはずです(たとえば、赤から透明への1秒のアニメーション)。それ以外の場合は、背景を透明にする必要があります。

4

2 に答える 2

5

私はついにMSフォーラムで正しい方向に向けられました。解決策は、OnTargetUpdatedハンドラーを登録し、ストーリーボードを開始する添付の動作を使用することです。以前にこのアプローチを試しましたが、セルのIsLoadedプロパティがtrueの場合にのみ、ストーリーボードを開始する必要があるようです。それは私が上で述べた副作用を取り除きます。

フォーラムの投稿へのリンクは次のとおりです。

于 2013-01-10T09:55:51.560 に答える
2

次のようなコンバーターを追加します。

namespace System.Converters
{
//Converter for cell animation 
  public  class flashConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string cellvalue = value.ToString();
        return cellvalue = ("place the condition here");
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return false;
    }
}

MainWindow.xaml.csに名前空間を追加します

   xmlns:loc="clr-namespace:YourProjectName.Converters"  

リソースに以下を追加します。

          <DataGrid.Resources>
          <loc:flashConverter x:Key="SomeConverter"></loc:flashConverter>
         </DataGrid.Resources>

DatagridTextColumnに、次を追加します。

  <DataGridTextColumn Header="yourDatagridHeader"  IsReadOnly="True" Binding="{Binding Path=yourDatagridHeader}">
             <DataGridTextColumn.ElementStyle>
        <!--Style to implement the datagrid cell animation for yourDatagridcell-->
            <Style TargetType="{x:Type TextBlock}">
             <Style.Triggers>
             <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here">
            <!-#E6F85050 is the hexadecimal value for RED-->
             <Setter Property="Background" Value="#E6F85050"/>
             </DataTrigger>
             <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here">
             <Setter Property="Background" Value="give the hexadecimal value for transparent here "/>
              </DataTrigger>
           </Style.Triggers>
            </Style>
        </DataGridTextColumn.ElementStyle>
      </DataGridTextColumn>

お役に立てれば !

于 2013-01-07T15:47:49.537 に答える