2010-05-13 79 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