1

ブックマーク リストがあります。ブックマークをタップすると、別のページに listA が読み込まれ、いくつかのアイテムで構成されます。

ここで、listA のアイテム インデックス 100 を指すブックマークをタップするとします。もう 1 つの listA が開き、listA の SelectedIndex を 100 に設定できます。これは、リストのどこかで表示されません。

問題は、SelectedIndex が 100 に設定されているにもかかわらず、リストの最上位の項目が一番上に表示されることです。

  • コンテンツをロードするときに、アイテム番号100を一番上に設定するにはどうすればよいですか?
4

4 に答える 4

2

ScrollViewer.ScrollToVerticalOffset メソッドと完全に連携

ステップ I. listA の Loaded イベントを呼び出す

<ListBox Name="ListA"  Loaded="HookScrollViewer">

ステップⅡ。「HookScrollViewer」メソッドを定義する

    private void HookScrollViewer(object sender, RoutedEventArgs e)
    {
        var element = (FrameworkElement)sender;
        var scrollViewer = FindChildOfType<ScrollViewer>(element);

        if (scrollViewer == null)
            return;

        scrollViewer.ScrollToVerticalOffset(lstA.SelectedIndex);
    }

ステップⅢ。「FindChildOfType」メソッドを定義する

    public static T FindChildOfType<T>(DependencyObject root) where T : class
    {
        var queue = new Queue<DependencyObject>();
        queue.Enqueue(root);

        while (queue.Count > 0)
        {
            var current = queue.Dequeue();
            for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
            {
                var child = VisualTreeHelper.GetChild(current, i);
                var typedChild = child as T;
                if (typedChild != null)
                {
                    return typedChild;
                }
                queue.Enqueue(child);
            }
        }
        return null;
    }

そして、それは「ListA」で動作します(ListAをListBoxの名前に置き換えます)

参照: WP7 の ListBox オフセット

于 2012-04-12T08:16:31.897 に答える
1

ListBox は本当に厄介です (特に複雑なデータ テンプレートと仮想化の場合)。次の回避策を使用する必要があります。

listbox.SelectedIndex = 1000; //I mean index of the last item
listbox.UpdateLayout();
listbox.SelectedIndex = 100;
listbox.UpdateLayout();

お役に立てれば

于 2012-04-11T16:54:07.763 に答える
0

あなたの質問を正しく理解しているかどうかわかりません。しかし、リストボックス項目の上に項目を設定したいだけなら、私はそうします..

listbox.Items.Insert(0, "何か);

また

linq を使用して注文する

listbox.Items.OrderBy("何か");

于 2012-04-12T03:16:33.897 に答える