2011-04-12 3 views
1

Когда я помещаю ListBox внутри ScrollViewer, если я не определяю атрибут Height для ListBox, он не прокручивается (кроме отскока вверх и вниз немного), поэтому элементы с экрана недоступны. Если я устанавливаю атрибут Height в ListBox на фактическую высоту, которую он занимает на экране, он отлично прокручивается. Если я не получу высоту точно, она не прокручивается правильно, например. Возможно, я не смогу достичь нижних элементов в списке.Listbox внутри вычислений высоты ScrollViewer

При размещении других элементов в единственном столбце LayoutRoot Grid выше и ниже ScrollViewer/ListBox я устанавливаю RowDefinition.Height = «Auto» для всех строк, кроме ScrollViewer, который получает «*». Сетка, как представляется, правильно распределяет пространство соответственно. Кроме того, я не знаю, априори, сколько места занимает ScrollViewer/ListBox.

Часть A: Почему мне нужно устанавливать высоту в ListBox, не зависит ли ее (виртуальная) высота от количества элементов?

Часть B: Кажется, мне нужно вручную выложить высоту строки Grid, а затем вручную повторить их, если требуется изменить шрифт или другое изменение стиля. Это так? Этот подход кажется фиктивным.

+0

Он становится еще более странным: мне нужен список с несколькими популярными элементами вверху, невыбираемая строка, а затем полный список ниже. Если я помещаю эти три элемента в сетку, содержащуюся в ScrollView, только нижний список ListBox прокручивается, а не вся сетка. Это совершенно неинтуитивно. Неправильно, даже. –

ответ

4

Ваши проблемы вызваны тем, что у вас есть ListBox внутри ScrollViewer. Не делай этого.

Список содержит внутренний ScrollViewer и будет (обычно) расти до доступного места.

По существу имея ScrollViewer внутри ScrollViewer, он не знает, какой из них должен расти, чтобы соответствовать доступному пространству и как они должны прокручиваться относительно друг друга.

Сообщите нам, что вы пытаетесь сделать. Есть лучший способ сделать это.

+0

Ах. Если кто-то упомянул, что на некоторых других форумах я пропустил это. С этим исправлением это делает почти то, что я хочу. В идеале я хотел бы поместить разделитель (я использую границу с минимальной высотой) внутри ListBox, чтобы разделить два раздела, вместо использования двух списков, разделенных границей. Причина, по которой я сделал это, заключается в том, что ListBox позволяет выбрать границу. Я могу игнорировать выбранное событие для него, но анимация/выделение все еще происходит. –

+0

Хотя я собираюсь отметить исходный вопрос. Благодаря! –

+0

Хорошо, выяснил проблему с границей, используя ListBoxItems в коде. –

Смежные вопросы