0

我尝试根据是否选择项目来更改 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”并没有解决我的问题......

在此先感谢,克里斯托夫

4

2 回答 2

0

您需要使用(UIElement.Visibility)asDiscreteObjectKeyFrameValue属性值。

<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>
于 2013-06-22T20:03:26.123 回答
0

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

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

于 2013-06-23T21:45:46.997 回答