2016-12-22 10 views
0

のスタイルは、GridView,SelectionMode "Single"の場合、次の定義が使用されます。要素が選択されると、選択を示すために特定のグリフが表示されます。VisualStateManagerは元の状態に戻りません

それは右のWindows 8.1で動作しますが、UWPと、それは変更状態を受け入れる:選択はグリフが表示されるようになりますが、元の状態(状態未選択)に戻りません、グリフは、変更を選択したままSelectionChangedイベントは削除されたアイテムとして古い選択をもたらします。

同様の問題は、(と重視プレスのような)他の州のために存在し、私は簡単にするために完全な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> 

を試みたが、助けにはなりませんでした。

+1

あなたは必ずあなたの視覚的な状態のグループと視覚の状態名は正しいですしていますか? https://msdn.microsoft.com/en-us/library/windows/apps/mt299136.aspx –

答えて

0

投稿したコードによると、Windows 8.1で定義されているVisualStateGroupVisualStateが使用されているようです。しかし、UWPでは、VisualStateが変更されました。

GridViewItem styles and templatesには、コントロールのデフォルトスタイルで定義されているVisualStateがすべてリストされています。ご覧のように、UWPでは、 "SelectionStates" VisualStateGroupはなく、 "未選択" VisualStateもありません。したがって、コードはUWPでは動作しません。

あなたの問題を解決するには、UWPで使用されている新しいGridViewItem styles and templatesに従ってスタイルを書き直すことをお勧めします。そして、新しいスタイルでは、 "普通" "と" 選択 ""視覚状態は同じ視覚状態グループにあります。だから、あなたのような「選択」で「SelectingGlyph」を示し、「ノーマル」でそれを隠すことができます。

<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> 
関連する問題