我尝试根据是否选择项目来更改 WinRT 应用程序中 ListViewItem 的显示。在 WPF 中,我会使用样式触发器,但这在 WinRT 中不可用。所以在网上搜索了一段时间后,我想我必须使用可视化状态管理器。据我了解,ListView 有一个视觉状态组“SelectionStates”,其中包含我感兴趣的状态。所以我想出了以下 ItemContainerStyle,我将其应用于我的 ListView:
<Style x:Key="itemContainerStyle" TargetType="SelectorItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="SelectorItem">
<Grid>
<TextBlock x:Name="textBlock" Text="{Binding}" Visibility="Visible" />
<TextBox x:Name="textBox" Text="{Binding Path=Name, Mode=TwoWay}" Visibility="Collapsed" />
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="textBox" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="textBlock" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
正常项目按预期显示(所以我假设应用了我的样式),但选择的东西根本不起作用。为什么?我假设状态是自动触发的,不是吗?那么我该如何解决呢?
注意:我使用“SelectorItem”作为目标类型,因为我也想在网格视图上使用相同的样式。那是问题吗?将其更改为“ListViewItem”并没有解决我的问题......
在此先感谢,克里斯托夫