2016-05-30 3 views
0

私のUWPアプリケーションでListViewに問題があります。最初に項目を選択すると、MouseOverが終了した後にVisualStateが「選択済み」に変更されますが、別の項目を選択した後でもう一度選択すると、MouseOverを選択しなくてもVisualState "Pressed"次のアイテム。だから、私のItemは、残りのセッションのためにこの状態を取り消すために、必要なVisualStateに1回だけ切り替えます。 これは以前のようなことを覚えていないので、この動作の原因は何か、そしてこれはUWP固有のものになる可能性があります。なぜ私のListView-ItemはVisualState Selectedに一度ジャンプするだけですか?

私は今XAMLでそれを使用するので、これは、私のリストビューです:

このItemContainerStyleを使用しています
<ListView IsItemClickEnabled="True" 
      Grid.Row="1" 
      Grid.Column="1" 
      ScrollViewer.VerticalScrollMode="Auto" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      ItemsSource="{Binding Path=list, Mode=OneWay}" 
      ItemTemplate="{StaticResource RepVSmallIcon70ItemTemplate}" 
      TabIndex="1" 
      SelectedIndex="{Binding Path=selectedIndex, Mode=TwoWay}" 
      SelectionChanged="ListView_SelectionChanged" 
      IsRightTapEnabled="False" 
      ItemContainerStyle="{StaticResource ListViewItemStyleUWP}"/> 

<Style x:Key="ListViewItemStyleUWP" TargetType="ListViewItem"> 
    <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> 
    <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> 
    <Setter Property="Background" Value="MediumOrchid"/> 
    <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/> 
    <Setter Property="TabNavigation" Value="Local"/> 
    <Setter Property="IsHoldingEnabled" Value="True"/> 
    <Setter Property="Padding" Value="12,0,12,0"/> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="MinWidth" Value="160"/> 
    <Setter Property="MinHeight" Value="100"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListViewItem"> 
       <Border x:Name="OuterContainer" RenderTransformOrigin="0.5,0.5"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"> 
           <!-- unselektiert --> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="BorderBrush"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Orange"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Background"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="LightBlue"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Margin"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="0 0 0 2"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Pressed"> 
           <!-- Klick --> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="BorderBrush"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Red"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Background"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Blue"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Margin"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="2 2 2 4"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="SelectionStates"> 
          <VisualState x:Name="Selected"> 
            <!--Selektiert--> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="BorderBrush"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="DarkRed"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Background"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="DarkBlue"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Duration="0" 
                   Storyboard.TargetName="ContentBorder" 
                   Storyboard.TargetProperty="Margin"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="0 0 0 2"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid x:Name="ReorderHintContent" Background="Transparent"> 
         <Border x:Name="ContentContainer"> 
          <Border x:Name="ContentBorder" 
            Background="LightCyan" 
            BorderBrush="DarkCyan" 
            BorderThickness="2"> 
           <Grid> 
            <ContentPresenter x:Name="contentPresenter" 
                 ContentTransitions="{TemplateBinding ContentTransitions}" 
                 ContentTemplate="{TemplateBinding ContentTemplate}" 
                 Content="{TemplateBinding Content}" 
                 HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                 VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                 Margin="{TemplateBinding Padding}" /> 
           </Grid> 
          </Border> 
         </Border> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

0

ListViewItem styles and templatesSelectionStates VisualStateGroupsを持っていません。そのため、ListViewItemスタイルでは、selectedの表示状態はSelectionStatesで管理されません。 Selected VisualStateをCommonStates VisualStateGroupに移動します。そしてそれは動作します。 コードを次のように更新しました。

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListViewItem"> 
      <Border x:Name="OuterContainer" RenderTransformOrigin="0.5,0.5"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualState x:Name="Normal"> 
            <!-- unselektiert --> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="BorderBrush"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Orange" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Background"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="LightBlue" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Margin"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="0 0 0 2" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState>      
         <VisualState x:Name="Pressed"> 
            <!-- Klick --> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="BorderBrush"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Red" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Background"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="Blue" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Margin"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="2 2 2 4" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
         <VisualState x:Name="Selected"> 
            <!-- Selektiert --> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="BorderBrush"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="DarkRed" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Background"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="DarkBlue" /> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Duration="0" 
                     Storyboard.TargetName="ContentBorder" 
                     Storyboard.TargetProperty="Margin"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="0 0 0 2" /> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState>      
        </VisualStateGroup>           
       </VisualStateManager.VisualStateGroups> 
       <Grid x:Name="ReorderHintContent" Background="Transparent"> 
          <Border x:Name="ContentContainer"> 
           <Border x:Name="ContentBorder" 
             Background="LightCyan" 
             BorderBrush="DarkCyan" 
             BorderThickness="2"> 
            <Grid> 
             <ContentPresenter x:Name="contentPresenter" 
                  Margin="{TemplateBinding Padding}" 
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                  Content="{TemplateBinding Content}" 
                  ContentTemplate="{TemplateBinding ContentTemplate}" 
                  ContentTransitions="{TemplateBinding ContentTransitions}" /> 
            </Grid> 
           </Border> 
          </Border> 
         </Grid> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
関連する問題