2 Stimmen

Control-Hintergrund von einem anderen Control aus ändern

Ich habe ein ControlTemplate für ein Steuerelement (d.h. Cell in DataGrid) und ich möchte den Hintergrund der Zeile ändern, wenn eine Zelle ausgewählt ist. Ich habe dies nicht auf Row tun, weil die SelectionUnit auf Zellen festgelegt ist.

Gibt es eine Idee, wie ich den Hintergrund der Zeile ändern kann, wenn die Zelle ausgewählt ist?

1voto

GameAlchemist Punkte 18409

Die DataGridRow, die die DataGridCell enthält, ist der Vorfahre dieser DataGridCell in der visuellen Struktur. (Sie können den Vorfahren mit VisualTreeHelper.GetParent() finden) Behandeln Sie also das selectionChanged-Ereignis, suchen Sie die Zeile und ändern Sie ihren Hintergrund (wobei Sie den Hintergrund der Zeile und der vorherigen Zeile im Auge behalten, um ihn beim nächsten SelectionChanged wiederherzustellen)

0voto

Rachel Punkte 126340

Ich würde einfach einen Trigger verwenden, der auf IsKeyboardFocusWithin . Dies bedeutet, dass jedes Mal, wenn ein Objekt in diesem DataGridRow den Tastaturfokus hat, wird die Zeile hervorgehoben.

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

Die Alternative ist die Bearbeitung der ClickEvent und navigieren Sie in der visuellen Struktur nach oben, um die DataGridRow zu finden, und stellen Sie die Hintergrundfarbe von dort aus ein. Wenn Sie diese Route wählen, habe ich einige VisualTreeHelpers die es Ihnen ermöglicht, ein Objekt in der visuellen Baumstruktur von WPF leicht zu finden.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X