私の問題は、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);
このオフセットを計算するには助けが必要です