2013-06-19 30 views
10

Tôi đang sử dụng WPF để viết một ứng dụng máy tính bảng Windows 8 và có một điều khiển ListView trên màn hình.Loại bỏ chuột có hiệu lực trên một ListView trong WPF

Chế độ xem danh sách có nhiều hàng bao gồm nhiều hơn 1 trang, do đó cuộn dọc được bật.

Khi tôi chạm vào màn hình, bộ chọn màu xanh nhạt xuất hiện và ở giữa màn hình khi tôi cuộn lên và xuống (nhưng mục được chọn được đánh dấu bằng màu xanh đậm sẽ không thay đổi). Tôi đoán đó là con chuột có hiệu lực vì hiệu ứng tương tự sẽ xuất hiện khi tôi sử dụng chuột.

Tôi cũng sử dụng DataTemplate để thu thập các mục.

Làm cách nào để tôi có thể sử dụng chuột màu xanh nhạt có hiệu lực?

Đây là XAML cho ListView của tôi

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

Và đây là mẫu hàng của tôi:

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

Tôi đang sử dụng Visual studio/Blend 2012.

Cảm ơn trước

Trả lời

15

EDIT:

Cách duy nhất tôi có thể thực hiện việc này là xác định lại ListViewItemControlTemplate. Đưa vào mã bên dưới một thử và xem nếu nó giải quyết vấn đề của bạn:

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> 

Tôi đã hardcoded màu sắc cho số SelectedVisualStates cho mục đích trình diễn. Lý tưởng nhất là bạn sẽ nhận được chúng từ một tập tin tài nguyên.

+0

Hi Richard, nhờ trả lời. Ví dụ đầu tiên của bạn không tạo ra sự khác biệt nào. Bạn đã có thể làm điều đó để làm việc? Ví dụ thứ 2 của bạn hoạt động nhưng áp dụng cho toàn bộ listview vì vậy tôi cần để có được ví dụ đầu tiên của bạn để làm việc. – Sun

+0

Tôi e rằng tôi không có sẵn hộp Windows 8 cho tôi để kiểm tra. Nếu bạn không nhận được câu trả lời trước, tôi sẽ xem xét sau. –

+0

Rực rỡ. Cảm ơn thời gian của bạn – Sun

1

Đối với tôi nó làm việc tốt, như thế này:

<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

Vui lòng bao gồm một số thông tin về TẠI SAO điều này sẽ hiệu quả và không chỉ nói "Đây là mã tốt" – thesecretmaster

Các vấn đề liên quan