0

次の定義は、"Single"ItemContainerのスタイルとして使用されます。要素が選択されると、選択を示すために特定のグリフが表示されます。GridViewSelectionMode

Windows 8.1 では正常に動作しますが、UWP では変更された状態を受け入れます: Selectedはグリフを表示しますが、元の状態 (状態Unselected ) には戻らず、グリフは選択が変更されたままになりSelectionChangedます。削除されたアイテム。

他の状態 ( PressedFocusedなど) にも同様の問題が存在します。わかりやすくするために、完全な VisualStateManager は示していません。

<Style x:Key="MyItemContainerStyle" TargetType="SelectorItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="SelectorItem">
                <Border>
                    <Grid>
                        <!--  Layout of the grid  -->
                    </Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected" />
                            <VisualState x:Name="SelectedUnfocused">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                                                     Storyboard.TargetProperty="Opacity"
                                                     To="1"
                                                     Duration="0" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                                                     Storyboard.TargetProperty="Opacity"
                                                     To="1"
                                                     Duration="0" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

も試した

<VisualState x:Name="Unselected">
    <Storyboard>
        <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                         Storyboard.TargetProperty="Opacity"
                         To="0"
                         Duration="0" />
    </Storyboard>
</VisualState>

しかし、助けにはなりませんでした。

4

1 に答える 1

0

投稿したコードによると、Windows 8.1 で定義されたVisualStateGroupおよびVisualStateを使用しているようです。ただし、UWP では、これらVisualStateの s が変更されました。

GridViewItem のスタイルとテンプレートではVisualState、コントロールの既定のスタイルで定義されているすべての が一覧表示されます。ご覧のとおり、UWP には " SelectionStates "VisualStateGroupも " Unselected "もありませんVisualState。したがって、コードは UWP では機能しません。

問題を解決するには、UWP で使用される新しいGridViewItem スタイルとテンプレートに従ってスタイルを書き直すことをお勧めします。また、新しいスタイルでは、「通常」と「選択済み」の表示状態が同じ表示状態グループに属します。したがって、次のように、「Selected」で「SelectingGlyph」を表示し、「Normal」で非表示にすることができます。

<VisualState x:Name="Normal">
    <Storyboard>
        <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                         Storyboard.TargetProperty="Opacity"
                         To="0"
                         Duration="0" />
        <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
    </Storyboard>
</VisualState>
...
<VisualState x:Name="Selected">
    <Storyboard>
        <DoubleAnimation Storyboard.TargetName="SelectingGlyph"
                         Storyboard.TargetProperty="Opacity"
                         To="1"
                         Duration="0" />
        ...
    </Storyboard>
</VisualState>
于 2016-12-27T13:15:42.140 に答える