C# 滚动到列表框顶部

问题描述 投票:0回答:3

我看过很多帖子,展示了如何滚动到列表框的底部项目,但无法弄清楚如何自动滚动到列表框的顶部。 如果我向下滚动列表框,然后使用我的过滤功能,列表框将停留在您向下滚动到的位置,因此用户可能看不到向下滚动到的上方的结果。

我一直在尝试使用 listbox.ScrollIntoView 但无法获得正确的功能。这就是它所在的上下文......(评论部分):

private void filter_Click(object sender, RoutedEventArgs e)
{
    string filterString = textBox1.Text;
    XElement _xml = XElement.Load("1/1.xml");
    {
        results.Items.Clear();
        foreach (XElement value in _xml.Elements("Operators").Elements("Operator"))
        {
            1Item _item = new 1Item();
            _item.TradingName = value.Element("TradingName").Value;

            if (_item.Town.IndexOf(filterString, 0, StringComparison.CurrentCultureIgnoreCase) != -1)
            {
                results.Items.Add(_item);
                // add scroll function here
            }
        }
    } 
}

非常感谢。

c# wpf listbox
3个回答
32
投票
if(results.Items.Count > 0)
    results.ScrollIntoView(results.Items[0]);

3
投票

ScrollIntoView
对我不起作用,但这做到了:

VisualTreeHelperEx.FindDescendantByType<ScrollViewer>(YourListView)?.ScrollToTop();

这使用扩展WPF工具包来获取ScrollViewer,但您当然可以手动执行,例如这个答案


0
投票

一个重要的注意事项是,如果您从另一个线程或组件调用 ScrollIntoView,则还需要调用调度程序:

    public async Task ScrollToTop()
    {
        await this.Dispatcher.BeginInvoke(() => {
            if (lstRecords.Items.Count > 0)
                    lstRecords.ScrollIntoView(lstRecords.Items[0]);
        });
    }
© www.soinside.com 2019 - 2024. All rights reserved.