2011-12-28 4 views
2

У меня есть ControlTemplate для элемента управления (т. Е. Ячеек в DataGrid), и я хочу изменить фон строки, если ячейка выбрана. Я не делал этого в строке, потому что SelectionUnit установлен в ячейки.Изменить фон управления с другого элемента управления

Любые идеи, как я могу изменить фон строки, если ячейка выбрана?

ответ

1

DataGridRow, содержащий DataGridCell, является предком этого DataGridCell в визуальном дереве. (вы можете найти предка с помощью VisualTreeHelper.GetParent()) Так обрабатывать событие SelectionChanged, найти строку и изменить свой фон (отслеживающих строки и строки предыдущего фона, чтобы восстановить его в течение следующего SelectionChanged)

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 и перемещения вверх по визуальному дереву, чтобы найти DataGridRow, и установив его цвет фона оттуда. Если вы выберете этот маршрут, у меня есть VisualTreeHelpers, который позволит вам легко найти объект в визуальном дереве WPF.

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