2017-05-19 60 views
1

我正在使用HeaderedItemsControl。每個項目是一個3列的網格,每列中都有一個邊框和TextBlock。我希望每個項目中邊界的背景顏色交替出現。 (基本交替行的背景效果)。我試圖在爲應用背景顏色,在它所有的邊界網格中的用戶控件級別創建一個風格的基礎上,包含控制AlternationIndex:如何根據父級的AlternateIndex設置孩子的風格?

<Style TargetType="Grid" x:Key="myItemsGrid"> 
    <Style.Resources> 
    <Style TargetType="Border"> 
     <Setter Property="Background" Value="Azure" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=AlternationIndex, RelativeSource={RelativeSource AncestorType=ItemsControl}}" Value="2"> 
      <Setter Property="Background" Value="{StaticResource color_LogoLight}" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Style.Resources> 
</Style> 

的Setter位正在工作,因爲邊界都是「Azure」。但是,如何正確引用AlternationIndex,以便每隔一行更改邊框背景顏色。我試着將RelativeSource指向HeaderedItemsControl和ItemsControl,但都不是正確的目標。我瀏覽了活的視覺樹,但我找不到任何可以參考的地方。

任何幫助表示讚賞。

回答

0

您必須在ItemControl的項目上查找AlternationIndex,而不是在ItemsControl本身上!但是你必須搜索綁定的類型?例如,在ListBox中它是一個ListBoxItem,在ItemsControl中它是一個ContentPresenter
不要忘記Path=(ItemsControl.AlternationIndex)和你的情況(AlternationIndex == 2)你必須AlternationCount設置在ItemsControl中至少!所以這個代碼應該工作:

<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2"> 
    <Setter Property="Background" Value="{StaticResource color_LogoLight}" /> 
</DataTrigger> 
+0

有兩件事... ContentPresenter有點失蹤。我理解了這個概念,但我無法辨別在這種情況下作爲「ListBoxItem」的行爲。而且,出於某種原因,括號會有所作爲,因爲沒有它們就無法運作。很有幫助。感謝您的答覆。 –