根据选择状态更改WinRT应用程序中列表项的模板

时间:2013-06-22 14:37:05

标签: windows xaml winrt-xaml

我尝试根据项目是否被选中来更改WinRT应用程序中ListViewItem的显示。在WPF中,我会使用样式触发器,但这在WinRT中不可用。所以在搜索网页一段时间后,我想我必须使用视觉状态管理器。据我所知,ListView有一个可视状态组“SelectionStates”,它保存着我感兴趣的状态。所以我想出了我在ListView上应用的以下ItemContainerStyle:

        <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”并没有解决我的问题...

提前致谢, 克里斯托弗

2 个答案:

答案 0 :(得分:0)

您需要使用(UIElement.Visibility)作为DiscreteObjectKeyFrame的{​​{1}}属性的值。

Value

答案 1 :(得分:0)

我发现了问题:列表的SelectionMode设置为None。因此,状态变化从未触发过。

此外,还有多个选择状态,如SelectedUnfocused,必须予以考虑。我发现在“样式和模板”上进行网络搜索对于在MSDN上找到合适的页面非常有帮助。