Изменить фон элемента управления из другого элемента управления - PullRequest
2 голосов
/ 28 декабря 2011

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

Есть идеи, как изменить фон строки, если выделена ячейка?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

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

0 голосов
/ 28 декабря 2011

Я бы просто использовал триггер на основе 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...