Моя проблема заключается в том, что у меня есть ящик: списку новостейProgramly список прокрутки окно
Taping на какой-то предмет будет открыть Aticle страницу с полным текстом статьи.
Так что, когда я вернуться обратно на странице новостей я вижу List Box, как это было прежде, чем я переходите к статье, но я хочу элемент, который был использован появляются на верхней
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);
Мне нужна помощь, чтобы вычислить это смещение
Я нашел решение, возможно, не совершенное, но оно работает: scrollViwer.ScrollToVerticalOffset (0); scrollViwer.ScrollToVerticalOffset (NewsListBox.SelectedIndex); – Cheese
Как насчет того, чтобы ответить на этот вопрос и отметить этот вопрос как «ответил»? – Sheridan
LOL. Извините, я не имел в виду, чтобы вы правильно оценили мой ответ, я хотел правильно указать правильный правильный ответ. :) – Sheridan