WPF Listbox не будет прокручивать по вертикали - PullRequest
2 голосов
/ 08 марта 2010

Внутри Groupbox У меня есть Listbox, ListboxItems также определены в XAML. Список определен:

<ListBox Name="lvAvoidCountry" Margin="5,5,5,5"  
    Background="Transparent" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" >

Элементы определены следующим образом:

<ListViewItem >
  <CheckBox Name="chkAlbanien" Tag="55">
    <StackPanel Orientation="Horizontal">
      <Image Source="images/flag_albania.png" Height="30"></Image>
      <TextBlock Text="Albanien" Margin="5,0,0,0"></TextBlock>
    </StackPanel>
  </CheckBox>
</ListViewItem>

Если я удаляю настройки Scrollviewer, я получаю горизонтальную прокрутку, и элементы хорошо отформатированы - правильной ширины. Если я использую настройки scrollviewer, то элементы обрезаются, поэтому все элементы помещаются в список. (например, флаг отображается, флажок отображается, но текст просто «Альба»).

Спасибо за любые подсказки!

Ответы [ 2 ]

3 голосов
/ 08 марта 2010

Как видно из названия, ScrollViewer.HorizontalScrollBarVisibility="Disabled" отключает горизонтальную прокрутку. Если вы сделаете это, но ваши ListBoxItems слишком длинные, они будут обрезаны. StackPanel не будет увеличиваться или уменьшаться, чтобы поместиться в ListBox, и он не будет «оборачивать» ваши элементы, чтобы поместиться в ListBox, если он слишком узкий, даже если вы добавите TextWrapping в TextBlock. Это очень упрямо. Я думаю, что ваша главная проблема в том, что StackPanel.

Вместо StackPanel, попробуйте использовать Grid с двумя столбцами, определенными так:

<ListViewItem >
  <CheckBox Name="chkAlbanien" Tag="55">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Image Grid.Column="0" Source="images/flag_albania.png" Height="30"/>
        <TextBlock Grid.Column="1"
                   TextWrapping="Wrap"
                   Text="Albanien" Margin="5,0,0,0"/>
    </Grid>
  </CheckBox>
</ListViewItem>

Auto будет сжимать столбцы изображения, а * даст тексту все оставшееся пространство. Затем добавьте TextWrapping к вашему текстовому блоку, если он все еще слишком длинный.

Отредактировано: добавлен более полный пример кода и немного изменен мой ответ.

0 голосов
/ 14 июля 2010

, если вы хотите вертикальную прокрутку в списке, не помещайте его в панель стека, вместо этого используйте сетку.

...