ListBox с ItemTemplate (и ScrollBar!) - PullRequest
       16

ListBox с ItemTemplate (и ScrollBar!)

33 голосов
/ 27 января 2009

У меня есть список данных и элемент списка 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, но они не влияют на ситуацию.

Ответы [ 4 ]

31 голосов
/ 27 января 2009

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

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

9 голосов
/ 27 января 2009

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

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

НТН

5 голосов
/ 29 апреля 2012

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

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

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

-em-

0 голосов
/ 27 января 2009

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

-pom-

...