2017-03-09 15 views
0

アニメーションを使用してグループ化されたデータグリッド内の行の翻訳を別のグループに表示する際に問題が発生します。アニメーションは起こりますが、その行はの後ろにあるの後ろに移動し、新しい位置に移動します。データグリッド移動のアニメーション

グループ化はセルの1つの内容に基づいて行われるため、ユーザーがコンテンツを変更すると、その行は新しいグループに移動します。ここでは、グリッドを示し、いくつかのXAMLです:

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="False"> 
    <DataGrid.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.ContainerStyle> 
     <Style TargetType="{x:Type GroupItem}"> 
      <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
       <StackPanel> 
        <TextBlock Text="{Binding Name}"/> 
        <ItemsPresenter /> 
       </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
      </Setter> 
     </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
    </DataGrid.GroupStyle> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/> 
    <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/> 
    <DataGridTextColumn Header="Email" Binding="{Binding Email}"/> 
    <DataGridTemplateColumn Header="Country"> 
     <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Country}"/> 
     </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
     <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Country, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBoxBase_OnTextChanged"/> 
     </DataTemplate> 
     </DataGridTemplateColumn.CellEditingTemplate> 
    </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

は、私はTextChangedイベントハンドラでそれを発射しています、アニメーションを表示します。そこにコードが新しいグループにDataGridRow及び目標点の位置を、アニメーションを実行するためのメソッドを呼び出し:

private void Animate(FrameworkElement element, Point target) 
{ 
    if (element != null) 
    { 
    Point sourcePoint = element.PointToScreen(new Point(0, 0)); 
    double yOffset = target.Y - sourcePoint.Y; 

    element.SetValue(Panel.ZIndexProperty, 10); // this doesn't help 
    TranslateTransform translateTransform = new TranslateTransform(); 
    element.RenderTransform = translateTransform; 

    Duration duration = new Duration(TimeSpan.FromSeconds(3)); 
    DoubleAnimation anim = new DoubleAnimation(0, yOffset, duration); 
    translateTransform.BeginAnimation(TranslateTransform.YProperty, anim); 
    } 
} 

これは動作しますが、他のグループに下降行が後ろ他に行く示されています行;すなわち移動する行は途中の他の行の下に隠れている。 DataGridRowにZIndexを設定しても何もしないようです。また、行まで動かすと、動いている行が他の行に表示されます。私はTextChanged以外のイベントからアニメーションを起動しようと試みましたが(これはとにかくやり遂げる必要があると思いますが)、私は問題に見えるものは見つけられませんでした。

ありがとうございました。

答えて

0

私は私の質問の答えを考え出しました。私が必要としたヒントは、Silverlight postから来ました。特に、「すべてのリストアイテムは、レイヤーでレイアウトしたい場合は兄弟でなければなりません」という行があります。私にとって何が起こったのかというのは、グループ分けのために行がお互いの兄弟ではなく、共通の親の直接の子供ではなかったということでした。代わりに、兄弟であった行を含むのはGroupItemです。 要素DataGridRowある

GroupItem groupItem = TryFindParent<GroupItem>(element); 
    groupItem.SetValue(Panel.ZIndexProperty, 10); 

を移動する:だから、私はアニメーション化する()メソッドのコードを追加する必要がありました。

私はまだアニメーションのトリガを引き出す必要がありますが、少なくとも行はパスに沿って他の行の前を移動しています。

関連する問題