2013-06-19 8 views
10

Używam WPF, aby napisać aplikację na tablety z systemem Windows 8 i mieć kontrolkę ListView na ekranie.Usunąć mysz nad efektem na ListView w WPF

Widok listy zawiera wiele wierszy obejmujących więcej niż jedną stronę, więc włączone jest przewijanie w pionie.

Po dotknięciu ekranu pojawia się jasnoniebieski przycisk wyboru i pozostaje na środku ekranu podczas przewijania w górę iw dół (ale wybrany element, który jest podświetlony na ciemnoniebieski, nie zmienia się). Domyślam się, że to efekt myszy, ponieważ to samo dzieje się efekt, kiedy używam myszy.

Używam DataTemplate do zbierania przedmiotów.

Jak mogę przejechać jasnoniebieską myszkę nad efektem?

Oto XAML dla mojego 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> 

I tu jest mój szablon pozycja:

<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>   

Używam programu Visual Studio/Mieszanka 2012.

góry dziękuję

Odpowiedz

15

EDYTOWANIE:

Jedynym sposobem, w jaki mogłem to wykorzystać, było przedefiniowanie ListViewItemControlTemplate. Podać kod poniżej spróbować i zobaczyć, czy to rozwiąże problem:

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> 

Mam ustalony kolory dla SelectedVisualStates do celów demonstracyjnych. Najlepiej byłoby je pobrać z pliku zasobów.

+0

Cześć Richard, dzięki za odpowiedź. Twój pierwszy przykład nie robi różnicy. Czy udało ci się to sprawić? Twój drugi przykład działa, ale odnosi się do całego listview, więc muszę zrobić pierwszy przykład. – Sun

+0

Obawiam się, że nie mam do tej pory dostępnego systemu Windows 8 do przetestowania. Jeśli nie otrzymasz wcześniej odpowiedzi, przyjrzę się później. –

+0

Genialny. Dziękujemy za poświęcony czas. – Sun

1

Dla mnie to działa dobrze, tak:

<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

Proszę podać informacje o tym, DLACZEGO to zadziała, a nie tylko powiedzieć "Oto dobry kod" – thesecretmaster

Powiązane problemy