I'm using WPF to write a windows 8 tablet application and have a ListView control on the screen.
我正在使用WPF编写一个Windows 8平板电脑应用程序,并在屏幕上有一个ListView控件。
The list view has numerous rows that cover more than 1 page, so vertical scrolling is enabled.
列表视图有许多行,覆盖超过1页,因此启用了垂直滚动。
When I touch the screen a pale blue selector appears and stays in the middle of the screen as I scroll up and down (but the selected item which is highlighted in a darker blue doesn't change). I'm guessing it's the mouse over effect as the same happens effect appears when I use the mouse.
当我触摸屏幕时,当我向上和向下滚动时,会出现一个淡蓝色选择器并停留在屏幕中间(但是以深蓝色突出显示的所选项目不会改变)。我猜它是鼠标效果,因为当我使用鼠标时会出现相同的效果。
I use a DataTemplate for the items collection too.
我也使用DataTemplate作为items集合。
How can I get ride of the pale blue mouse over effect?
如何让苍白的蓝色鼠标超过效果?
Here is the XAML for my ListView
这是我的ListView的XAML
<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>
And here is my item template:
这是我的项目模板:
<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>
I'm using Visual studio/Blend 2012.
我正在使用Visual studio / Blend 2012。
Thanks in advance
提前致谢
2 个解决方案
#1
15
EDIT:
编辑:
The only way I could get this to work was to redefine the ListViewItem
ControlTemplate
. Give the code below a try and see if it resolves your issue:
我能让它工作的唯一方法是重新定义ListViewItem ControlTemplate。尝试下面的代码,看看它是否能解决您的问题:
ListViewItem
Style
:
ListViewItem样式:
<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>
I have hardcoded the colors for the Selected
VisualStates
for demonstration purposes. Ideally you would get these from a resource file.
为演示目的,我已为所选VisualStates硬编码颜色。理想情况下,您可以从资源文件中获取这些内容。
#2
1
For me it worked well, like this:
对我来说它运作良好,像这样:
<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
15
EDIT:
编辑:
The only way I could get this to work was to redefine the ListViewItem
ControlTemplate
. Give the code below a try and see if it resolves your issue:
我能让它工作的唯一方法是重新定义ListViewItem ControlTemplate。尝试下面的代码,看看它是否能解决您的问题:
ListViewItem
Style
:
ListViewItem样式:
<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>
I have hardcoded the colors for the Selected
VisualStates
for demonstration purposes. Ideally you would get these from a resource file.
为演示目的,我已为所选VisualStates硬编码颜色。理想情况下,您可以从资源文件中获取这些内容。
#2
1
For me it worked well, like this:
对我来说它运作良好,像这样:
<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>