コントロール(つまりDataGridのセル)用のControlTemplateを持っていて、セルが選択されている場合はその行の背景を変更したいと思います。 SelectionUnitがセルに設定されているため、Rowでこれを実行しませんでした。別のコントロールからコントロールの背景を変更する
セルが選択されている場合、どのように行の背景を変更できますか?
コントロール(つまりDataGridのセル)用のControlTemplateを持っていて、セルが選択されている場合はその行の背景を変更したいと思います。 SelectionUnitがセルに設定されているため、Rowでこれを実行しませんでした。別のコントロールからコントロールの背景を変更する
セルが選択されている場合、どのように行の背景を変更できますか?
DataGridCellを含むDataGridRowは、このビジュアルツリー内のこのDataGridCellの祖先です。 ので、SelectionChangedイベントを処理行を検索し、その背景を変更(あなたがVisualTreeHelper.GetParent()を使用して祖先を見つけることができます)(次のSelectionChanged中にそれを復元するために、行のトラックと前の行の背景を維持する)
私はちょうど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を見つけるために、ビジュアルツリーをナビゲートし、そこからの背景色を設定しています。このルートを選択すると、WPFのビジュアルツリーでオブジェクトを簡単に見つけることができるVisualTreeHelpersがあります。
var row = VisualTreeHelpers.FindParent<DataGridRow>(clickedDataGridCell);