ListBox更改选中一个时未选定项目的不透明度

时间:2011-11-03 21:35:08

标签: wpf xaml triggers listbox styles

我有一个列表框,其中包含已定义的DataTemplate,Style和ItemContainerStyle。

此列表框包含SelectionMode =“Single”。

最初所有项目都有Opacity="0.7",当选择项目时,我将其设为Opacity="1"

<ListBox.ItemContainerStyle> 
<Style TargetType="{x:Type ListBoxItem}"> 
    <Style.Setters>
        <Setter Property="Opacity" Value="0.7"/>
    </Style.Setters>
    <Style.Triggers> 
        <DataTrigger Binding="{Binding IsEventLocked}" Value="False"> 
            <Setter Property="IsEnabled" Value="False"/>
            <Setter Property="Opacity" Value="0.2"/>
        </DataTrigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Opacity" Value="1"/>
        </Trigger>
    </Style.Triggers> 
</Style> 

但我还需要使用Opacity="0.2"制作所有其他(未选中)项目,直到取消选中所选项目。

简而言之:[初始(不透明度= 0.7)] - &gt; [ItemSelected = {(SelectedItem:Opacity = 1),(所有未选项:不透明度= 0.2)}] ​​- &gt; [项目取消选择(SelectedItem == null)=(Opasity = 0.7)]

感谢syggestions和ideas!

1 个答案:

答案 0 :(得分:2)

触发:选择在那里&amp;&amp;没有被选中。

这应该做:

<Style TargetType="ListBoxItem">
    <Setter Property="Opacity" Value="0.7" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}"
                        Value="false" />
                <Condition
                        Binding="{Binding SelectedItems.Count, RelativeSource={RelativeSource AncestorType=ListBox}}"
                        Value="1" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Opacity" Value="0.2" />
        </MultiDataTrigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Opacity" Value="1" />
        </Trigger>
    </Style.Triggers>
</Style>