0

私の問題は、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);

このオフセットを計算するには助けが必要です

4

3 に答える 3

0

最後に使用した日付を示す「DateTime」の「UsedDate」プロパティを追加し、ListBoxをUserDateでソートしてみてはいかがでしょうか。

于 2013-07-22T08:27:53.720 に答える