2016-05-30 73 views
0

我在我的UWP应用程序中遇到了ListView问题。第一次选择一个项目时,在MouseOver结束之后它的VisualState更改为“Selected”,因为它应该这样做,但是当我第二次选择它时,在我选择了另一个Item之后,即使在MouseOver之后,它仍保留在VisualState“Pressed”中,直到我选择下一个项目。所以我的项目只切换一次到所需的VisualState,在会话的其余部分忽略这个状态。 这种行为的原因是什么,这对于UWP来说可能是独一无二的,因为我不记得以前看过类似的东西。为什么我的ListView-Item只跳回到VisualState Selected一次?

这是我的ListView,我在XAML中使用它现在:

<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}"/> 

使用这种ItemContainerStyle:

<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 templates没有SelectionStates VisualStateGroups。所以ListViewItem风格不管理SelectionStates井中的selected视图状态。将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>