Windows 根据选择状态更改WinRT应用程序中列表项的模板
我尝试根据是否选择了ListViewItem来更改WinRT应用程序中ListViewItem的显示。在WPF中,我会使用样式触发器,但这在WinRT中不可用。因此,在搜索web一段时间后,我想我必须使用可视化状态管理器。据我所知,ListView有一个可视状态组“SelectionStates”,它保存我感兴趣的状态。因此,我在ListView上应用了以下ItemContainerStyle:Windows 根据选择状态更改WinRT应用程序中列表项的模板,windows,xaml,winrt-xaml,Windows,Xaml,Winrt Xaml,我尝试根据是否选择了ListViewItem来更改WinRT应用程序中ListViewItem的显示。在WPF中,我会使用样式触发器,但这在WinRT中不可用。因此,在搜索web一段时间后,我想我必须使用可视化状态管理器。据我所知,ListView有一个可视状态组“SelectionStates”,它保存我感兴趣的状态。因此,我在ListView上应用了以下ItemContainerStyle: <Style x:Key="itemContainerStyle" Targe
<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”并没有解决我的问题
提前感谢,,
Christoph您需要使用(UIElement.Visibility)
作为离散对象关键帧的值
属性的值
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="textBox" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="textBlock" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
我发现了问题:列表的SelectionMode
设置为None
。因此,状态更改从未触发
此外,还必须考虑多种选择状态,如selectednfoccused
。我发现在网上搜索“样式和模板”对于在MSDN上找到合适的页面非常有帮助。谢谢你的建议。我已经改变了,但我没有任何效果。。。我觉得状态更改根本没有被触发,但我不知道如何调试它。好的,检查一下,我认为视觉状态没有正常工作。感谢您的帮助-我同时发现了问题:列表中的选择被禁用。Hay@Christoph,我有同样的问题,如果列表中的选择被禁用,那么我可以在ListviewItem样式中使用VisualState管理器中的SelectionStates。由于焦点状态工作正常,但我需要SelectionStates,因为当我们失去焦点时,VisualState中的动画会反转,如何覆盖此plz。