**我自己写的和AI回复的,效果都一样,就是选其他项后,之前选中的项的样式无法还原为未选中状态,最后都变成已选中Selected定义的样式
**
============================
在WinUI3中,可以通过定义ListViewItem的VisualStateManager.VisualStateGroups来实现选中状态和非选状态的透明度变化。具体步骤如下:
首先,在XAML中创建一个ListView,并为其添加ItemContainerStyle属性,用于自定义ListViewItem的样式。
在ItemContainerStyle中,添加VisualStateManager.VisualStateGroups,用于定义不同的可视状态。
在VisualStateGroups中,添加两个VisualStateGroup,分别表示选中状态和非选中状态。
在每个VisualStateGroup中,添加VisualState,用于定义具体的状态和相应的动画效果。
在VisualState中,使用Storyboard来定义透明度的变化效果。
下面是一个示例代码,演示了如何定义ListViewItem的VisualStateManager.VisualStateGroups:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:0.2" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unselected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="Opacity"
To="0.5"
Duration="0:0:0.2" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter x:Name="ContentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
Opacity="0.5" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<!-- ListView的Item内容 -->
</ListView>
在上述示例中,通过VisualStateManager.VisualStateGroups定义了两个可视状态:Selected和Unselected。在Selected状态下,通过DoubleAnimation将ContentPresenter的Opacity属性从0.5变为1,实现了选中状态的透明度变化。在Unselected状态下,通过DoubleAnimation将ContentPresenter的Opacity属性从1变为0.5,实现了非选中状态的透明度变化。