我有一个控件的ControlTemplate(即DataGrid中的Cell),如果选择了一个单元格,我想更改Row的背景。我没有在Row上执行此操作,因为SelectionUnit设置为单元格。
如果选择了单元格,我怎么能改变行的背景?
答案 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);