0

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

例如,给定这个网格(其中“ [ ]”代表一个单元格):

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

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

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

我希望该列中的所有单元格,包括选定的单元格,都被“突出显示”(可以像更改背景颜色一样简单):

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

是否有捷径可寻?谢谢!

4

1 回答 1

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

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

于 2010-05-17T14:20:22.183 回答