我的Silverlight应用程序中有一个DataGrid
,并希望在选中该列中的任何单元格时“突出显示”整个列。
,例如,给定此网格(其中“[ ]
”代表一个单元格):
[ ][ ][ ]
[ ][ ][ ]
[ ][ ][ ]
如果我选择一个单元格,就像这样
[ ][ selected ][ ]
[ ][ ][ ]
[ ][ ][ ]
我希望该列中的所有单元格(包括所选单元格)都“突出显示”(可以像更改背景颜色一样简单):
[ ][ selected ][ ]
[ ][ highlighted ][ ]
[ ][ highlighted ][ ]
有一种简单的方法吗? 谢谢!
答案 0 :(得分: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;
}
}
您需要添加代码以将旧单元格更改回正常状态。我最初的想法是修改他们当前的视觉状态,以便他们显示被选中,但不记得如何(如果可以的话)从课外进行。