如何修复Windows Phone 8.1 XAML中listview的一个bug

本文关键字:bug 一个 listview Windows 何修复 Phone XAML | 更新日期: 2023-09-27 18:08:20

我在HUB中创建了一个列表并成功管理,但是当我试图创建一个样式来分离要列出的项目时,我有一个非常奇怪的bug,当我试图在列表中间向下滑动时,他开始颤抖,只是因为我添加了一个空白,如果我删除正常工作。

是我的代码!

<ListView x:Name="list" Loaded="ListView_Loaded" SelectedItem="true"  SelectionChanged="searchResultsList_SelectionChanged" ItemsSource="{Binding}">
                                    <ListView.ItemContainerStyle>
                                        <Style TargetType="ListViewItem">
                                            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                            <Setter Property="Margin" Value="0,0,0,20" />
                                        </Style>
                                    </ListView.ItemContainerStyle>
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="80" />
                                                    <ColumnDefinition Width="10" />
                                                    <ColumnDefinition Width="*" />
                                                </Grid.ColumnDefinitions>
                                                <Border Width="80" Height="80">
                                                    <Image Source="{Binding Caminho}" />
                                                </Border>
                                                <StackPanel Margin="0,16,0,0" Grid.Column="2">
                                                    <TextBlock Foreground="White" Text="{Binding NomeCurso}" TextWrapping="WrapWholeWords" FontSize="{StaticResource TextStyleExtraLargeFontSize}" />
                                                </StackPanel>
                                            </Grid>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>

所以我的错误是特别在这部分代码:

<Setter Property="Margin" Value="0,0,0,20" />

如果我离开这个工作良好,有人知道它是什么吗?

如何修复Windows Phone 8.1 XAML中listview的一个bug

这是WP 8.1中的一个错误,它与虚拟化有关。

你需要明确地为每个项目指定宽度,或者使用我使用的(感谢Rudy),这是一个扩展的ListView,解决了这个问题,空白仍然可以工作:

public class PerfectScrollListView : ListView
{
    public PerfectScrollListView()
    {
        this.SizeChanged += PerfectScrollListView_SizeChanged;
    }
    private void PerfectScrollListView_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (ItemsPanelRoot != null)
        {
            ItemsPanelRoot.Width = e.NewSize.Width;
        }
    }
}

奇怪的是它竟然能工作。但要解决您的问题,您可以使用边缘与您的数据模板网格。为列表项数据模板的主网格设置边距

   <DataTemplate>
                                        <Grid Margin="0,0,0,20">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="80" />
                                                <ColumnDefinition Width="10" />
                                                <ColumnDefinition Width="*" />
                                            </Grid.ColumnDefinitions>
                                            <Border Width="80" Height="80">
                                                <Image Source="{Binding Caminho}" />
                                            </Border>
                                            <StackPanel Margin="0,16,0,0" Grid.Column="2">
                                                <TextBlock Foreground="White" Text="{Binding NomeCurso}" TextWrapping="WrapWholeWords" FontSize="{StaticResource TextStyleExtraLargeFontSize}" />
                                            </StackPanel>
                                        </Grid>
                                    </DataTemplate>