2010-05-13 6 views
0

J'ai un DataGrid dans mon application Silverlight, et je voudrais mettre en surbrillance une colonne entière quand une cellule de cette colonne est sélectionnée.Silverlight Datagrid: Mettez en surbrillance une colonne entière?

Par exemple, étant donné cette grille (où « [ ] » représente une cellule):

[  ][  ][  ] 
[  ][  ][  ] 
[  ][  ][  ] 

Si je sélectionne une cellule, comme celui-ci

[  ][ selected ][  ] 
[  ][   ][  ] 
[  ][   ][  ] 

Je voudrais que toutes les cellules de cette colonne , y compris la cellule sélectionnée, pour être "en surbrillance" (peut être aussi simple que de changer simplement la couleur de fond):

[  ][ selected ][  ] 
[  ][ highlighted ][  ] 
[  ][ highlighted ][  ] 

Existe-t-il un moyen facile de faire cela? Merci!

Répondre

1

est ici le début du comportement qui devrait vous orienter dans la bonne direction

public class DataGridHighlightBehavior : Behavior<DataGrid> 
{ 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 

     AssociatedObject.CurrentCellChanged += AssociatedObject_CurrentCellChanged; 
    } 

    void AssociatedObject_CurrentCellChanged(object sender, EventArgs e) 
    { 
     foreach (object i in AssociatedObject.ItemsSource) 
     { 
      var item = AssociatedObject.CurrentColumn.GetCellContent(i); 
      if (item == null) 
       return; 
      var parent = GetParent<DataGridCell>(item); 
      if (parent != null) 
       parent.Background = new SolidColorBrush(Colors.Red); 
     } 
    } 

    public static T GetParent<T>(DependencyObject source) 
      where T : DependencyObject 
    { 
     DependencyObject parent = VisualTreeHelper.GetParent(source); 
     while (parent != null && !typeof(T).IsAssignableFrom(parent.GetType())) 
     { 
      parent = VisualTreeHelper.GetParent(parent); 
     } 
     return (T)parent; 
    } 
} 

Vous devez ajouter du code pour changer les vieilles cellules à leur état normal. Ma première pensée était de modifier leur état visuel actuel afin qu'ils montrent sélectionné, mais ne pouvait pas se rappeler comment (si vous le pouvez) de le faire de l'extérieur de la classe.

+0

Super, merci! Je n'avais jamais utilisé de comportements auparavant et j'étais capable de partir d'ici et de comprendre mon problème. – Donut

Questions connexes