2011-02-01 49 views
2

我有一个数据绑定标签控制:标签项目在一个项目的变更Opaticy控制

<TabControl ItemsSource="{Binding Products}" Name="ProductsTabControl"> 
    <TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}"/> 
    </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

这种控制是表示每个产品一个突片,但是我想使停产产品半透明的突出部(即将其不透明度设置为0.2)。如何在项目被自动生成时更改tabitem的不透明属性。我知道我可以使用一种风格来改变它们,但我只想改变那些停止使用的风格。

回答

5

在ItemsContainerStyle为TabControl,创造一个绑定到自己财产的DataTrigger(如IsDiscontinued),并从那里设置不透明度

<TabControl ItemsSource="{Binding Products}" Name="ProductsTabControl"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsDiscontinued}" Value="True"> 
        <Setter Property="Opacity" Value="0.2"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.ItemContainerStyle> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

更新

如果你想的内容不连续的标签半透明,你可以做同样的事情,但在DataTemplate

<TabControl ItemsSource="{Binding Products}" Name="ProductsTabControl"> 
    <TabControl.Resources> 
     <DataTemplate DataType="{x:Type local:Product}"> 
      <Border Name="bg" BorderBrush="Black" BorderThickness="1"> 
       <TextBlock Text="{Binding Name}"/> 
      </Border> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsDiscontinued}" Value="True"> 
        <Setter TargetName="bg" Property="Opacity" Value="0.2"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </TabControl.Resources> 
    <!--...--> 
</TabControl> 
+0

完美的作品。感谢您的详细解答。我没有意识到风格在与项目相同的数据上下文中被“执行”! – Darren 2011-02-02 11:03:21