ListView 滚动时左右移动
ListView moving left and right while scrolling
我有以下 ListView:
<ListView ItemsSource="{Binding ArtistList}">
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,0.5" BorderBrush="#22ffffff" Tapped="ArtistTapped">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Ellipse Grid.Column="0" Canvas.ZIndex="0" Fill="#22ffffff" Width="50" Height="50" Margin="0,10"/>
<Ellipse Grid.Column="0" Canvas.ZIndex="1" Stretch="UniformToFill" Width="50" Height="50" Margin="0,10">
<Ellipse.Fill>
<ImageBrush ImageSource="{Binding firstAlbumArt}"/>
</Ellipse.Fill>
</Ellipse>
<StackPanel Grid.Column="1" Margin="20,10,0,10">
<TextBlock Text="{Binding name}" Foreground="#ffffffff" FontFamily="Segoe WP" FontSize="18"/>
<TextBlock Foreground="#aaffffff" FontFamily="Segoe WP" FontWeight="Light" FontSize="14">
<Run Text="{Binding amountofalbums}"/>
<Run Text="album(s)"/>
</TextBlock>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
当我上下滚动时,ListView会轻微左右移动,很烦人。有两种方法可以解决此问题:
删除 ItemContainerStyle
=> 项目不再拉伸,这是必要的
将 HorizontalAlignment = left 添加到 ListView
=> 同样,项目不再拉伸...
有没有办法在保持 ListViewItems 拉伸的同时防止 ListView 左右跳动?
在ListView
中设置ScrollViewer.HorizontalScrollMode="Disabled"
。它应该停止不需要的滚动行为。
<ListView ItemsSource="{Binding ArtistList}" ScrollViewer.HorizontalScrollMode="Disabled">
<!-- rest of xaml code -->
</ListView>
由于 ListView 中的虚拟化,这是当前 OS 中的一个错误。
到目前为止,我找到的最佳解决方案是为列表中的项目提供与父项相匹配的实际宽度。
这里已经讨论了堆栈溢出问题:
我有以下 ListView:
<ListView ItemsSource="{Binding ArtistList}">
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,0.5" BorderBrush="#22ffffff" Tapped="ArtistTapped">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Ellipse Grid.Column="0" Canvas.ZIndex="0" Fill="#22ffffff" Width="50" Height="50" Margin="0,10"/>
<Ellipse Grid.Column="0" Canvas.ZIndex="1" Stretch="UniformToFill" Width="50" Height="50" Margin="0,10">
<Ellipse.Fill>
<ImageBrush ImageSource="{Binding firstAlbumArt}"/>
</Ellipse.Fill>
</Ellipse>
<StackPanel Grid.Column="1" Margin="20,10,0,10">
<TextBlock Text="{Binding name}" Foreground="#ffffffff" FontFamily="Segoe WP" FontSize="18"/>
<TextBlock Foreground="#aaffffff" FontFamily="Segoe WP" FontWeight="Light" FontSize="14">
<Run Text="{Binding amountofalbums}"/>
<Run Text="album(s)"/>
</TextBlock>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
当我上下滚动时,ListView会轻微左右移动,很烦人。有两种方法可以解决此问题:
删除 ItemContainerStyle => 项目不再拉伸,这是必要的
将 HorizontalAlignment = left 添加到 ListView => 同样,项目不再拉伸...
有没有办法在保持 ListViewItems 拉伸的同时防止 ListView 左右跳动?
在ListView
中设置ScrollViewer.HorizontalScrollMode="Disabled"
。它应该停止不需要的滚动行为。
<ListView ItemsSource="{Binding ArtistList}" ScrollViewer.HorizontalScrollMode="Disabled">
<!-- rest of xaml code -->
</ListView>
由于 ListView 中的虚拟化,这是当前 OS 中的一个错误。
到目前为止,我找到的最佳解决方案是为列表中的项目提供与父项相匹配的实际宽度。
这里已经讨论了堆栈溢出问题: