2010-05-13 52 views
0

我有一个DataGrid在我的Silverlight应用程序,并选择该列中的任意单元格时,想“突出”整列。Silverlight Datagrid:突出显示整个列?

例如,鉴于此网格(其中“[ ]”代表细胞):

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

如果我选择一个单元格,这样

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

我想在该列的所有单元格,包括选定的单元格,以“突出显示”(可以像改变背景颜色一样简单):

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

有没有简单的方法来做到这一点? 谢谢!

回答

1

这里是行为应该指向你在正确的方向

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; 
    } 
} 

您需要添加代码来改变旧的细胞恢复到正常状态的开始。我最初的想法是修改他们目前的视觉状态,让他们展示精选,但不记得如何(如果可以的话)从课外做到这一点。

+0

太好了,谢谢!我以前从来没有使用过行为,我能够从这里走出来并解决我的问题。 – Donut 2010-05-20 20:23:51