2011-05-02 68 views
3

我對給定ListBox的ListBoxItems使用ControlTemplate。 ControlTemplate在Style中定義,幷包含一個Rectangle,其可見性需要根據AlternationIndex進行切換。雖然我看到如何使用AlternationIndex直接控制ListBoxItem的背景,但我不確定如何使用觸發器來引用控件模板中的命名項。任何輸入讚賞:WPF AlternationIndex來控制ControlTemplate項目的可見性

XAML摘錄:

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <Grid Height="84" Width="700"> 
        <!-- 
        TURN ME ON FOR EVERY EVEN NUMBERED LIST ITEM 
        --> 
        <Rectangle x:Name="_listItemBg" Width="700" Height="83" Opacity="0.12"> 
... 

我曾嘗試以下,但無濟於事。正確的XAML語法迴避我:

<ControlTemplate.Triggers> 
    <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
     <Setter Property="Rectangle.Visibility" TargetName="_listItemBg" Value="Hidden" /> 
    </Trigger> 
    <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
     <Setter Property="Rectangle.Visibility" TargetName="_listItemBg" Value="Visible" /> 
    </Trigger> 

...

+1

這可能是因爲你明確地設置在矩形的定義能見度=「可見」。嘗試刪除它,讓風格設置者來照顧它。 – 2011-05-02 00:26:08

+0

謝謝,但似乎並不是這樣。我已經更新了觸發器以包含TargetName屬性,但儘管在輸出中看不到任何綁定錯誤,但它似乎不起作用。上面的觸發器和矩形已經更新,以反映這個最新的嘗試。 – 2011-05-02 00:42:44

+0

根據你的評論,馬特,似乎我可能需要兩個互補的觸發器 - 一個隱藏矩形和一個顯示它。我更新了XAML。可悲的是,這也行不通。 – 2011-05-02 01:15:50

回答

3

也許你忘了設置AlternationCount?在任何情況下,這裏是基於代碼中的小型獨立工作樣本:

<Grid> 
    <Grid.Resources> 
     <PointCollection x:Key="sampleData"> 
      <Point>1,2</Point> 
      <Point>3,4</Point> 
      <Point>5,6</Point> 
     </PointCollection> 
    </Grid.Resources> 
    <ListBox ItemsSource="{StaticResource sampleData}" AlternationCount="2"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
          <Grid Height="84" Width="700"> 
           <Rectangle x:Name="_listItemBg" Width="700" Height="83" Fill="Red" Opacity="0.12"/> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
            <Setter Property="Rectangle.Visibility" TargetName="_listItemBg" Value="Hidden" /> 
           </Trigger> 
           <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
            <Setter Property="Rectangle.Visibility" TargetName="_listItemBg" Value="Visible" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListBox.ItemContainerStyle> 
    </ListBox> 
</Grid> 
+0

的確我忘記設置AlternationCount,因爲我沒有意識到我需要。謝謝,裏克! – 2011-05-02 03:44:14