Je rencontre un problème lors de l'utilisation d'une animation pour afficher la traduction d'une ligne dans une grille de données groupée d'un groupe à un autre. L'animation se produit, mais la ligne se déplace derrière autres lignes sur son chemin vers la nouvelle position. Le regroupement est effectué en fonction du contenu de l'une des cellules. Ainsi, lorsqu'un utilisateur modifie le contenu, la ligne est déplacée vers le nouveau groupe. Voici quelques XAML qui montre la grille:Animer déplacer un datagridrow
<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>
Pour afficher l'animation, je le tir hors tension dans le gestionnaire d'événements TextChanged. Le code localise là, le DataGridRow et un point cible dans le nouveau groupe, et appelle une méthode pour faire l'animation:
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);
}
}
Cela fonctionne, mais une ligne se déplaçant vers le bas à un autre groupe s'affiche va derrière l'autre des rangées; c'est-à-dire que la rangée mobile est en dessous et cachée par les autres rangées le long du chemin. Définir ZIndex sur le DataGridRow ne semble rien faire. Notez également que le déplacement d'une ligne fonctionne correctement - la ligne en mouvement est affichée sur les autres lignes. J'ai également essayé de déclencher l'animation à partir d'événements autres que TextChanged (ce que je pense devoir éventuellement faire) mais je n'en ai trouvé aucun qui semble important.
Merci.