我的问题是我有 NewsList 框:
点击某个项目,它将打开带有完整文章的文章页面。
因此,当我返回新闻页面时,我会看到导航到文章之前的列表框,但我希望使用的项目出现在顶部
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);
我需要帮助来计算这个偏移量