Wpf 在ItemsControl中,如何更改所有未选中项目的不透明度?
我知道这个问题听起来有点奇怪,但我想更改ItemsControl中未选中的所有项目的不透明度。换句话说,我希望使所选项目更“可见”,使其他项目更“模糊” 我有一个自定义控件“MyCustomControl”,它派生自ItemsControl,其中每个项都是类“MyObject”的实例 我为我的自定义控件创建了一个样式,其中我将ItemTemplate设置为一个源属性绑定到“MyObject”的属性“LargeImage”的图像。 问题来了。当我选择一个项目,我想设置其他元素的不透明度,但我还没有找到一个方法 以下是我的(简化)XAML代码:Wpf 在ItemsControl中,如何更改所有未选中项目的不透明度?,wpf,Wpf,我知道这个问题听起来有点奇怪,但我想更改ItemsControl中未选中的所有项目的不透明度。换句话说,我希望使所选项目更“可见”,使其他项目更“模糊” 我有一个自定义控件“MyCustomControl”,它派生自ItemsControl,其中每个项都是类“MyObject”的实例 我为我的自定义控件创建了一个样式,其中我将ItemTemplate设置为一个源属性绑定到“MyObject”的属性“LargeImage”的图像。 问题来了。当我选择一个项目,我想设置其他元素的不透明度,但我还没有
<Style TargetType="{x:Type MyCustomControl}" x:Key="MyStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ui:MyCustomControl}">
<Border Height="{TemplateBinding Height}" Width="Auto" Background="{TemplateBinding Background}">
<ItemsPresenter VerticalAlignment="Center" IsHitTestVisible="True"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Button>
<Image Source="{Binding Path=LargeImage}" Stretch="Uniform"/>
</Button>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
上面展示了如何使用列表框来实现这一点,以避免与您自己的类型混淆。它假定您的数据项(MyObject
)具有IsSelected
属性,并且您已将转换器资源放在可视化树中的某个位置
您可以放弃转换器,而在
IsSelected
更改时触发状态更改,但您知道了。我认为一个非常简单的解决方案是在使用“IsSelected”属性的数据模板中添加触发器,使用触发器或DataTrigger,类似于:
<DataTemplate.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Opacity" Value="Yourvalue"/>
</Trigger>
<DataTrigger Binding="{Binding IsSelected}" Value="False">
<Setter Property="Opacity" Value="Yourvalue"/>
</DataTrigger>
</DataTemplate.Triggers>
<DataTemplate.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Opacity" Value="Yourvalue"/>
</Trigger>
<DataTrigger Binding="{Binding IsSelected}" Value="False">
<Setter Property="Opacity" Value="Yourvalue"/>
</DataTrigger>
</DataTemplate.Triggers>