2012-12-20 2 views
2

У меня есть коллекция изображений, которые выровнены по горизонтали. Содержит ListBox полностью заполняет родительский элемент управления. Теперь изображения должны быть изменены, путем изменения размера родительского элемента управления. Я думаю, что ListBoxItem не изменяет размер своей высоты, чтобы соответствовать размеру ListBox.ListBox с объектами с изменяемыми по горизонтали объектами

Мой код ListBox

<ListBox ItemsSource="{Binding Path=Pages}" 
     VerticalContentAlignment="Stretch" 
     KeyboardNavigation.IsTabStop="False" 
     Height="Auto" MinHeight="120"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding Path=PageThumbnail}" Stretch="Uniform/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

Возможно, это связано с тем, что свойство MinHeight установлено равным 120? – Mir

+0

Почему свойство 'MinHeight'' ListBox' влияет на изменение размера 'ListBoxItems', если я сделаю окно больше? Я проверю это. – Pyth0n

ответ

3

Заменить StackPanel в ItemsPanelTemplate с:

<UniformGrid Rows="1"/> 

Затем добавьте этот атрибут в вашей ListBox:

HorizontalContentAlignment="Stretch" 

EDIT: размещая пример, никакие пункты не привязка применяется.

<Grid> 
    <ListBox 
    VerticalContentAlignment="Stretch" 
    HorizontalContentAlignment="Stretch" 
    KeyboardNavigation.IsTabStop="False"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Rows="1"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <Image Source="o0.gif" Stretch="Uniform"/> 
     <Image Source="o1.gif" Stretch="Uniform"/> 
     <Image Source="o2.gif" Stretch="Uniform"/> 
    </ListBox> 
</Grid> 
+0

Не работает для меня. Не могли бы вы разместить полный список ListBox XAML? – Clemens

+0

@Clemens Я привел пример. – Mir

+0

Даже если это сработает, все ячейки в UniformGrid будут одинакового размера. Что касается изображений с различными пропорциями, например. пейзаж против портрета? – Clemens

2

Хитрость заключается в том, чтобы просто отключить вертикальную полосу прокрутки в ListBox. Не нужно устанавливать HorizontalContentAlignment или VerticalContentAlignment. Также нет необходимости устанавливать Stretch="Uniform" в элементе управления Image, так как это значение по умолчанию.

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" ...> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate>     
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding PageThumbnail}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Спасенный день, спасибо! –

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