Подтвердить что ты не робот

ListBox с ItemTemplate (и ScrollBar!)

У меня есть привязка данных и itemtemplated ListBox:

<ListBox x:Name="lbLista" 
         ScrollViewer.VerticalScrollBarVisibility="Visible">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
          <CheckBox IsChecked="{Binding Deleteable, Mode=TwoWay}" />
          <Label Content="{Binding Name}" />
        </StackPanel>
      </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Истины прекрасно видны, и они происходят из ObservableCollection.

Проблема - это полоса прокрутки, которая появляется, но не используется - у нее нет дескриптора для захвата. Я попытался установить некоторые связанные с ScrollView свойства в ListBox, но они не влияют на ситуацию.

4b9b3361

Ответ 1

Я вставил ваш код в тестовый проект, добавил около 20 элементов, и я получаю удобные полосы прокрутки, без проблем, и они работают так, как ожидалось. Когда я добавляю только пару элементов (таких, что прокрутка не нужна), я не могу использовать полосу прокрутки. Может ли так быть? что вы не добавляете достаточно предметов?

Если вы удалите ScrollViewer.VerticalScrollBarVisibility="Visible", тогда полосы прокрутки появятся только тогда, когда они вам понадобятся.

Ответ 2

ListBox будет пытаться расширить высоту, доступную.. Когда вы устанавливаете свойство Height для ListBox, вы получаете scrollviewer, который действительно работает...

Если вы хотите, чтобы ListBox соответствовал доступной высоте, вам может потребоваться отрегулировать высоту из ваших родительских элементов управления. Например, в сетке установка Height to Auto в вашем RowDefinition может сделать трюк...

НТН

Ответ 3

Мне никогда не удавалось с любым прокручиваемым содержимым, размещенным внутри панели стека (что-либо, полученное из ScrollableContainer). В стеке панели есть нечетный механизм компоновки, который путает дочерние элементы управления, когда операция измерения завершена, и я обнаружил, что вертикальный размер заканчивается бесконечным, поэтому не ограничивается - поэтому он выходит за пределы контейнера и заканчивается обрезанным. Полоса прокрутки не отображается, потому что элемент управления считает, что в нем нет всего пространства в мире, когда он этого не делает.

Вы всегда должны размещать прокручиваемый контент внутри контейнера, который может разрешить известную высоту во время операции макета во время выполнения, чтобы размер полосы прокрутки соответствовал. Родительский контейнер вверх в визуальном дереве должен иметь возможность разрешить фактическую высоту, и это происходит в сетке, если вы задаете высоту RowDefinition o для автоматического или фиксированного.

Это также происходит в Silverlight.

-его -

Ответ 4

Thnaks для ответа. Я тоже пробовал это для Пустого Проекта, и вот, всемогущий создатель неба и семи морей - это сработало. Первоначально у меня был ListBox внутри внутри root. По какой-то причине ListBox вообще не любит находиться внутри StackPanel! =)

-pom -