0

項目が選択されているかどうかに基づいて、WinRT アプリで ListViewItem の表示を変更しようとしています。WPF ではスタイル トリガーを使用していましたが、これは WinRT では使用できません。しばらく Web を検索した後、Visual State Manager を使用する必要があると思います。私が理解しているように、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」に変更しても問題は解決しませんでした...

前もって感謝します、クリストフ

4

2 に答える 2

0

のプロパティの(UIElement.Visibility)値として使用する必要があります。DiscreteObjectKeyFrameValue

<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 に答える