从另一个控件更改控制背景

时间:2011-12-28 15:40:47

标签: wpf xaml

我有一个控件的ControlTemplate(即DataGrid中的Cell),如果选择了一个单元格,我想更改Row的背景。我没有在Row上执行此操作,因为SelectionUnit设置为单元格。

如果选择了单元格,我怎么能改变行的背景?

2 个答案:

答案 0 :(得分:1)

包含DataGridCell的DataGridRow是可视树中此DataGridCell的祖先。 (你可以使用VisualTreeHelper.GetParent()找到祖先) 因此,处理selectionChanged事件,找到行并更改其背景(跟踪行和上一行背景以在下一个SelectionChanged期间恢复它)

答案 1 :(得分:0)

我只会使用基于IsKeyboardFocusWithin的触发器。这意味着只要DataGridRow中的对象具有键盘焦点,该行就会突出显示。

<Style TargetType="{x:Type DataGridRow}">
    <Setter Property="Background" Value="White" />
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Setter Property="Background" Value="Green" />
        </Trigger>
    </Style.Triggers>
</Style>

另一种方法是处理ClickEvent并导航Visual Tree以找到DataGridRow,并从那里设置它的背景颜色。如果你选择这条路线,我会有一些VisualTreeHelpers,你可以在WPF的可视树中轻松找到一个对象。

var row = VisualTreeHelpers.FindParent<DataGridRow>(clickedDataGridCell);