У меня есть сетка данных Silverlight с пользовательским кодом, которая позволяет использовать кнопки +/- с левой стороны и может отображать таблицу с древовидной структурой. Кнопки +/- привязаны к свойству IsExpanded в моих ViewModelRows, как я их называю. Видимость строк связана со свойством IsVisible в ViewModelRows, которое определяется на основе того, развернуты ли все родительские строки. Достаточно просто.
Этот код работает хорошо в том смысле, что если я прокручиваю вверх и вниз по сетке с помощью PageUp / PageDown или клавиш со стрелками, все правильные строки скрываются, и все имеет правильную структуру, и я могу играть с кнопками +/- до своего сердца. Тем не менее, вертикальная полоса прокрутки с правой стороны, хотя она начинается с правильного размера и плавно прокручивает строки, когда я сворачиваю строки и затем снова их растягиваю, не возвращается к правильному размеру.
Как правило, полосу прокрутки можно перемещать, чтобы прокручивать всю коллекцию, но, поскольку она слишком велика, после того, как полоса переместится на дно, остается еще ряд рядов, которые можно перевернуть. вплоть до самого дна или иногда вообще не прокручивать. Это довольно сложно описать, поэтому я включил снимок экрана с нарисованными черными линиями, чтобы показать разницу в длине полосы прокрутки, даже если в двух сетках одинаковое количество развернутых строк.
Я думаю, что это может быть ошибка, связанная с тем, как Datagrid выполняет виртуализацию строк. Мне кажется, что он неправильно отслеживает, какой высоты должен быть каждый ряд при изменении состояний расширения. Есть ли способ программно «ткнуть» (читай взломать) его, чтобы пересчитать его размер полосы прокрутки на LoadingRow или что-то безобразное? Я бы включил пример кода, но есть 2 файла c # и 1 файл xaml, поэтому я хотел узнать, слышал ли кто-нибудь еще об этой проблеме, прежде чем попытаться сделать ее воспроизводимой автономным способом. Еще раз, прокрутка с помощью клавиш со стрелками работает нормально, так что я уверен, что базовая логика и привязка работают, есть только одна проблема с неправильным вычислением высоты строки.
Поскольку я новый пользователь, он не позволит мне использовать теги изображений, поэтому вот ссылка на изображение проблемы:
http://img210.imageshack.us/img210/8760/messedupscrollbars.png