在Itemscontrol中更改选项卡项的不透明度

时间:2011-02-01 12:13:43

标签: wpf xaml data-binding tabcontrol tabitem

我有一个数据绑定标签控件:

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

此控件显示每个产品一个标签,但我想使已停产产品的标签半透明(即将其不透明度设置为0.2)。如何在自动生成项目时更改tabitem的opacity属性。我知道我可以用一种风格来改变它们,但我只想改变那些已停产的风格。

1 个答案:

答案 0 :(得分:5)

TabControl的ItemsContainerStyle中,创建一个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>
相关问题