【问题标题】:ListView - Scroll to specific itemListView - 滚动到特定项目
【发布时间】:2014-10-07 20:37:36
【问题描述】:

我有一个 ListView:

<ListView ItemsSource="{Binding}" x:Name="LvLevels" 
                  Margin="10 60 0 0" 
                  SelectionChanged="LvLevels_SelectionChanged">

        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
            </Style>
        </ListView.ItemContainerStyle>

        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>

                    <Border BorderBrush="White" BorderThickness="6">
                        <TextBlock Text="{Binding}" 
                                   FontSize="56" FontWeight="ExtraBold"
                                   Margin="10"
                                   HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                                   TextAlignment="Center">


                        </TextBlock>
                    </Border>

                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我需要选择特定的项目并将 ListView 滚动到它。我可以选择项目:

LvLevels.SelectedItem = CurrentLevel;

但我无法将 ListView 滚动到该项目。这是我的代码:

LvLevels.ScrollIntoView(LvLevels.SelectedItem);

我已经创建了演示示例here

这是一个code,它设置了DataContext并设置了Selected Item:

        List<int> data = new List<int>();
        for (int i = 0; i <= 20; i++)
            data.Add(i);

        LvLevels.DataContext = data;

        LvLevels.SelectedItem = LvLevels.Items[14];
        LvLevels.ScrollIntoView(LvLevels.SelectedItem);

【问题讨论】:

    标签: wpf xaml windows-8.1


    【解决方案1】:

    我相信你的问题是由这行引起的:

    LvLevels.SelectedItem = CurrentLevel;
    

    代替该行,使用类似该行的内容进行测试:

    LvLevels.SelectedItem = LvLevels.Items[4];
    

    关键是您只能将SelectedItem 设置为集合中的实际 项,该集合是数据绑定到ListView.ItemsSource 属性的数据。完成此操作后,对LvLevels.ScrollIntoView 的调用应该就可以正常工作了。

    【讨论】:

    • 这对我没有帮助。我创建了小演示示例github.com/demas/listview_example 并更新了问题。
    • 抱歉,我真的对加载完全陌生的解决方案不感兴趣。取而代之的是,尝试将您的 int 集合更改为自定义类类型。如果您从后面的代码中选择一个项目并调用ScrollIntoView,那么您会看到它确实工作...我对其进行了双重确定。
    • 我不提供加载解决方案。您只能在浏览器上查看代码。无论如何,我听从您的建议并重写代码以使用自定义类类型github.com/demas/listview_example/blob/master/App6/…。对不起,但它不起作用。我用“windows-8.1”标签标记了我的问题。您是否撰写有关 windows-8.1 现代 UI 应用程序的文章?如果你愿意,你能分享你的工作解决方案吗?
    • 我也在使用 Windows 8.1,但使用的是 WPF,而不是 Windows Store Apps。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多