0

以下定义用作“ Single”ItemContainer的样式。When an element is selected, a particular glyph becomes visible to indicate selection.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 中定义的VisualStateGroupVisualState 。但是,在 UWP 中,这些VisualStates 已更改。

GridViewItem 样式和模板中,它列出VisualState了控件默认样式中定义的所有 s。如您所见,在 UWP 中,没有“ SelectionStatesVisualStateGroup,也没有“ UnselectedVisualState。所以你的代码在 UWP 中不起作用。

为了解决您的问题,我建议您根据UWP 中使用的新GridViewItem 样式和模板重写您的样式。并且在新样式中,“ Normal ”和“ Selected ”视觉状态在同一个视觉状态组中。因此,您可以在“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 回答