Как установить позицию прокрутки в ListBox? - PullRequest
2 голосов
/ 14 сентября 2010

Я разрабатываю приложение silverlight 4 и часто использую списки и привязку данных. То, что я хотел бы сделать, это установить положение полосы прокрутки в нижней части моего списка. Есть ли простой способ сделать это?

Кстати, я пробовал это, но это не работает:

COTO_dg.ScrollIntoView(COTO_dg.Items[COTO_dg.Items.Count - 1]);

Спасибо, Еписмен.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2010

Код, который вы разместили, работает нормально, но не сразу после вставки элементов в ItemsControl.Чтобы обеспечить достаточно времени для обновления элемента управления, его проще использовать:

Dispatcher.BeginInvoke(() => lb.ScrollIntoView(lb.Items.Last());

, где lb - это ListBox или любой другой ItemsControl.(это работает в конструкторе страницы Silverlight, сразу после того, как какой-то код добавляет кучу элементов, только что протестированных).

Примечание: ссылки были по умолчанию, вставленные Visual Studio:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
0 голосов
/ 15 сентября 2010

Хорошо, нашел что-то не очень чистое, но это работает. Я опубликую это, чтобы другие люди увидели, как я это сделал:

Вот как я вызываю метод:

Dispatcher.BeginInvoke(new lol(my_method));

Я создал анонимный делегат и соответствующий метод, который я вызову в него:

    public delegate void lol();

    public my_method()
    {
        COTO_dg.ScrollIntoView(COTO_dg.Items[COTO_dg.Items.Count - 1]);
    }

Надеюсь, это кому-нибудь поможет.

...