2013-06-19 3 views
10

Ich verwende WPF, um eine Windows 8-Tablet-Anwendung zu schreiben und ein ListView-Steuerelement auf dem Bildschirm zu haben.Entfernen Sie die Maus über den Effekt auf einer ListView in WPF

Die Listenansicht enthält zahlreiche Zeilen, die mehr als 1 Seite umfassen, sodass das vertikale Scrollen aktiviert ist.

Wenn ich den Bildschirm berühre, erscheint eine hellblaue Auswahl und bleibt in der Mitte des Bildschirms, während ich nach oben und unten scrolle (aber der ausgewählte Gegenstand, der in einem dunkleren Blau hervorgehoben ist, ändert sich nicht). Ich vermute, es ist die Maus über den Effekt, da der gleiche Effekt passiert, wenn ich die Maus benutze.

Ich verwende ein DataTemplate auch für die Artikelsammlung.

Wie kann ich die hellblaue Maus über den Effekt bringen? Hier

ist das XAML für meine Listview

<ListView Grid.Row="1" 
       Margin="10"     
       HorizontalContentAlignment="Stretch" 
       ItemsSource="{Binding Source={StaticResource MyData}}" 
       ItemTemplate="{StaticResource MyItemTemplate}" 
       ScrollViewer.CanContentScroll="False" 
       ScrollViewer.PanningMode="VerticalOnly" 
       ScrollViewer.PanningRatio="0.5"> 
    </ListView> 

Und hier ist mein Artikel Vorlage:

<DataTemplate x:Key="MyItemTemplate"> 
     <Grid Margin="10,5">     
      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 
      <Border BorderBrush="Gray" 
        BorderThickness="1" 
        Grid.RowSpan="2" 
        CornerRadius="5" />     
      <TextBlock Text="{Binding Name}" 
         FontSize="20" 
         VerticalAlignment="Center" 
         Grid.Row="0" 
         Margin="10" /> 
      <Border Background="#FFB9B9B9" 
        Grid.Row="1" 
        CornerRadius="5" 
        Margin="10,0,10,4"> 
      <StackPanel HorizontalAlignment="Stretch"        
         Orientation="Horizontal"        
         Grid.Row="1">      
       <TextBlock VerticalAlignment="Center" 
          Text="Status: " 
          Margin="5,5,0,5" /> 
       <TextBlock VerticalAlignment="Center" 
          Text="{Binding CompletionStatus}" /> 
       <TextBlock VerticalAlignment="Center" 
          Text="% complete, " /> 
       <TextBlock VerticalAlignment="Center" 
          Text="Upload status: " /> 
       <TextBlock VerticalAlignment="Center" 
          Text="{Binding UploadStatus}" /> 
       <TextBlock VerticalAlignment="Center" 
          Text="last Modified: " /> 
       <TextBlock VerticalAlignment="Center" 
          Text="{Binding LastModified}" /> 
      </StackPanel> 
      </Border> 
     </Grid> 
    </DataTemplate>   

Ich bin mit Visual Studio/Cuvee 2012

Vielen Dank im Voraus

Antwort

15

EDIT:

Der einzige Weg, wie ich das zum Laufen bringen konnte, war die ListViewItemControlTemplate neu zu definieren. Geben Sie den Code unter einen Versuch und sehen, ob es das Problem löst:

ListViewItemStyle:

<Style x:Key="LvItemStyle" TargetType="ListViewItem"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListViewItem"> 
      <Border x:Name="border" Background="Transparent"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualState x:Name="Normal" /> 
         <VisualState x:Name="Disabled" /> 
        </VisualStateGroup> 
        <VisualStateGroup x:Name="SelectionStates"> 
         <VisualState x:Name="Unselected" /> 
         <VisualState x:Name="Selected"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="border" 
                   Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="LightBlue" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="SelectedUnfocused"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="border" 
                   Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="SkyBlue" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <ContentPresenter/> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

ListView:

<Grid Background="DarkGray"> 
    <ListView Grid.Row="1" 
      Margin="10"     
      HorizontalContentAlignment="Stretch" 
      ItemsSource="{Binding MyItems}" 
      ItemTemplate="{StaticResource LvDataTemplate}" 
      ItemContainerStyle="{StaticResource LvItemStyle}" 
      ScrollViewer.CanContentScroll="False" 
      ScrollViewer.PanningMode="VerticalOnly" 
      ScrollViewer.PanningRatio="0.5"> 
    </ListView> 
</Grid> 

ich die Farben fest einprogrammiert haben für die SelectedVisualStates zu Demonstrationszwecken. Im Idealfall würden Sie diese aus einer Ressourcendatei erhalten.

+0

Hallo Richard, danke für die Antwort. Ihr erstes Beispiel macht keinen Unterschied. Konnten Sie das zur Arbeit bringen? Ihr zweites Beispiel funktioniert, aber das gilt für die gesamte Listenansicht, also muss ich Ihr erstes Beispiel zur Arbeit bringen. – Sun

+0

Ich habe leider keine Windows 8 Box die ich zur Zeit testen kann. Wenn Sie vorher keine Antwort bekommen, werde ich später nachsehen. –

+0

Brilliant. Danke für Ihre Zeit – Sun

1

Für mich ist es gut funktioniert, wie folgt aus:

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="BorderThickness" Value="0" /> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 
</ListView.ItemContainerStyle> 
+1

Bitte geben Sie einige Informationen darüber, WARUM dies funktioniert, und sagen nicht nur "Hier ist der gute Code" – thesecretmaster

Verwandte Themen