2011-12-28 49 views
2

我有一個控件的ControlTemplate(即DataGrid中的單元格),並且如果選擇單元格,我想更改該行的背景。因爲SelectionUnit被設置爲單元格,所以我沒有在Row上這樣做。從另一個控件更改控制背景

任何想法如何改變行的背景,如果單元格被選中?

回答

1

包含DataGridCell的DataGridRow是此可視化樹中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);