Silverlight Datagrid:高亮显示整个列?

Silverlight Datagrid:高亮显示整个列?,silverlight,datagrid,coding-style,highlighting,Silverlight,Datagrid,Coding Style,Highlighting,我的Silverlight应用程序中有一个单元格,当选中该列中的任何单元格时,我希望“突出显示”整个列 例如,给定此网格(其中“[]”表示单元格): 如果我选择一个单元格,像这样 [ ][ selected ][ ] [ ][ ][ ] [ ][ ][ ] 我希望该列中的所有单元格(包括所选单元格)都“高亮显示”(只需更改背景色即可): 有没有一个简单的方法可以做到这一点? 谢谢 这是行为的开始,应该为你指明正

我的Silverlight应用程序中有一个单元格,当选中该列中的任何单元格时,我希望“突出显示”整个列

例如,给定此网格(其中“
[]
”表示单元格):

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

[     ][ selected ][     ]
[     ][          ][     ]
[     ][          ][     ]
我希望该列中的所有单元格(包括所选单元格)都“高亮显示”(只需更改背景色即可):

有没有一个简单的方法可以做到这一点?
谢谢

这是行为的开始,应该为你指明正确的方向

    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;
    }
}
公共类DataGridHighlightBehavior:行为
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.CurrentCellChanged+=AssociatedObject\u CurrentCellChanged;
}
无效关联对象\u CurrentCellChanged(对象发送方,事件参数e)
{
foreach(AssociatedObject.ItemsSource中的对象i)
{
var item=AssociatedObject.CurrentColumn.GetCellContent(i);
如果(项==null)
返回;
var parent=GetParent(项目);
如果(父项!=null)
parent.Background=新的SolidColorBrush(Colors.Red);
}
}
公共静态T GetParent(DependencyObject源)
其中T:DependencyObject
{
DependencyObject parent=VisualTreeHelper.GetParent(源);
while(parent!=null&&!typeof(T).IsAssignableFrom(parent.GetType())
{
父级=VisualTreeHelper.GetParent(父级);
}
返回(T)父级;
}
}

您需要添加代码以将旧单元格更改回其正常状态。我最初的想法是修改他们当前的视觉状态,使他们显示选定的,但不记得如何(如果可以的话)在课堂外这样做。

太好了,谢谢!我以前从未使用过行为,我能够从这里开始解决我的问题。
[     ][  selected   ][     ]
[     ][ highlighted ][     ]
[     ][ highlighted ][     ]
    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;
    }
}