Проблемы с вертикальной полосой прокрутки в DataGrid после изменения размера - PullRequest
1 голос
/ 30 июля 2010

Я работаю с DataGrid в Silverlight. Если у меня достаточно элементов, чтобы вертикальная полоса прокрутки была видна для всех размеров окна, и я несколько раз изменил размер окна, вертикальная прокрутка вышла из синхронизации. Большой палец становится маленьким, как будто элемент управления думает, что элементов больше, чем есть. Когда я перетаскиваю большой палец вниз или вверх, содержимое начинает прыгать. Это происходит постоянно, очень расстраивает. DataGrid лежит в пределах DockPanel, размер которого изменяется в зависимости от размера окна (без определенного размера)

У кого-нибудь есть идеи?

Ответы [ 4 ]

1 голос
/ 29 ноября 2011

Я попробовал аналогичный подход с производным DataGrid.

Разница в том, что OnApplyTemplate получит только экземпляр VerticalScrollbar, и был введен отдельный открытый метод для вызова UpdateLayout()на полосе прокрутки.Такой метод должен вызываться явным образом в ситуациях, когда размер полосы прокрутки может быть синхронизирован (DataGrid изменение размера содержимого и т. Д.)

Иногда одного UpdateLayout() было недостаточно, поэтому я добавил переворачиваниевидимость полосы прокрутки - это работало лучше, но все же не в 100% случаев

1 голос
/ 16 августа 2010

У меня есть похожие проблемы. Большинство из них может быть решено путем вызова UpdateLayout для сетки данных.

У меня тоже есть сетка данных в док-панели. Когда я прокручиваю вниз и выбираю нижнюю запись, а затем перезагружаю сетку данных, горизонтальная полоса прокрутки, кажется, закрывает последнюю запись. А вертикальная полоса прокрутки выглядит как можно ниже и не может быть перемещена вниз.

Если я использую колесико прокрутки мыши, можно просмотреть последнюю запись.

Это происходит только тогда, когда я показываю свое приложение в развернутом окне.

Удалось ли вам где-нибудь с этим?

0 голосов
/ 14 марта 2014

В стиле сетки данных удалите вертикальную полосу прокрутки и выполните следующие шаги:

Шаг 1: Скопируйте DataGridRowsPresenter с помощью средства просмотра прокрутки

Шаг 2: Сделайте HorizantalScrollBarVisibility отключенным

Шаг 3: VerticalScrollBarВидимость в Авто

0 голосов
/ 08 августа 2011

Это ошибка в сетке данных.Вы можете решить эту проблему, унаследовав от таблицы данных и с помощью метода OnApplyTemplate, который вы ищете для полос прокрутки и вручную обновите их макет:

public override void OnApplyTemplate()
{
    verticalScrollBar = this.GetTemplateChild("VerticalScrollbar") as ScrollBar;
    if (verticalScrollBar != null)
    {
        verticalScrollBar.UpdateLayout();
    }
}

Если это все еще не работает, попробуйте вызвать метод OnApplyTemplate вручную.

...