程序滚动列表框

时间:2013-07-22 07:54:11

标签: c# windows-phone-7 windows-phone-8

我的问题是我有新闻列表框:

enter image description here

点击某个项目,它将打开带有完整文章的aticle页面。

所以,当我返回新闻页面时,我看到列表框就像我导航到文章之前那样,但我希望项目使用在顶部

1)更改索引不起作用,因为它们必须保持不变。

我试过了:

if (currentArticle < NewsListBox.SelectedIndex)
{
    var scrollViwer = GetScrollViewer(NewsListBox) as ScrollViewer;
    if (scrollViwer != null)
    {

        scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + (NewsListBox.SelectedIndex - currentArticle));
    }
    currentArticle = NewsListBox.SelectedIndex;
}
else if (currentArticle == NewsListBox.SelectedIndex)
{
}
else
{
    var scrollViwer = GetScrollViewer(NewsListBox) as ScrollViewer;
    if (scrollViwer != null)
    {
        scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset - (currentArticle - NewsListBox.SelectedIndex));
    }
    currentArticle = NewsListBox.SelectedIndex;
}

public static DependencyObject GetScrollViewer(DependencyObject o)
{
    // Return the DependencyObject if it is a ScrollViewer
    if (o is ScrollViewer)
    { return o; }

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
    {
        var child = VisualTreeHelper.GetChild(o, i);

        var result = GetScrollViewer(child);
        if (result == null)
        {
            continue;
        }
        else
        {
            return result;
        }
    }
    return null;
}

它可以工作,但如果前一个元素没有正确地位于顶部,它就不会正确地将元素置于顶部 - 这在用户进行滚动时是不可能的。

此外:

NewsListBox.ScrollIntoView(NewsListBox.Items[5]);

工作正常,但它显示在底部的元素,我需要在顶部。

附加2:

这样可以正常工作:

NewsListBox.ScrollIntoView(NewsListBox.SelectedIndex+OFFSET);

我需要帮助来计算这个偏移量

3 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,可能并不完美,但它确实有效:scrollViwer.ScrollToVerticalOffset(0); scrollViwer.ScrollToVerticalOffset(NewsListBox.SelectedIndex);

答案 1 :(得分:0)

如何添加“DateTime”的“UsedDate”属性,指示最新的使用日期,并按UserDate对ListBox进行排序。

答案 2 :(得分:0)

我不确定您要对ScrollViewer做什么,但是当我需要重新安排UI容器控件(例如ListBox)中的项目顺序时,我只是重新排列绑定到控件的数据集合对象中的项目顺序,控件中的项目遵循该顺序。

您可以按照@terasato建议的日期(和时间)订购它们,或者使用Insert方法将所选项目移动到集合中的第一个位置。

如果我错过了你的观点,请道歉。

再次阅读你的问题之后,我看到一条线说集合对象的索引必须保持不变。如果您认为无法对原始集合进行排序,则需要对从原始集合中复制的另一个集合进行排序。

我经常这样做是为了允许用户过滤对象集合,同时保持原始对象集合不变。你有两个选择;在代码隐藏/视图模型中创建与集合相同类型的另一个属性,并将原始集合复制到该集合中,或使用xaml CollectionViewSource对象对UI中的对象进行排序。