2013-12-07 2 views
0

Невозможно получить мой горизонтальный ListBox с «Шаблон данных», чтобы полностью растянуться.
я исследовал эту тему и самый популярный ответ, чтобы установить ItemContainer стиль как:Данные Templated ListBox не растягивается Горизонтально - снова

<ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       </Style> 
</ListBox.ItemContainerStyle> 

Это не похоже на работу для меня.

Полный код XAML. ListBox.ItemsSource = ObservableCollection

<UserControl.Resources> 
    <ResourceDictionary> 


     <ItemsPanelTemplate x:Key="ItemsPanel"> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 

     <DataTemplate x:Key="ItemTemplate"> 
      <Button Margin="-2,-2,-4,-2" > 
       <StackPanel> 
        <TextBlock Text="{Binding}" 
           TextWrapping="Wrap"/> 
       </StackPanel> 
      </Button> 
     </DataTemplate> 

    </ResourceDictionary> 

</UserControl.Resources> 

<ListBox VerticalAlignment="Top" 
       Height="50" 
       Background="Red" 
       ItemsPanel="{StaticResource ItemsPanel}" 
       ItemTemplate="{StaticResource ItemTemplate}" 
       ItemsSource="{Binding Headers}" > 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       </Style> 
      </ListBox.ItemContainerStyle> 
     </ListBox> 
+0

Вы используете горизонтальную 'StackPanel' как' ItemsPanel'. горизонтальная 'StackPanel' НЕ будет растягивать ее содержимое по горизонтали. Я не уверен, чего вы пытаетесь достичь. –

+0

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

ответ

0

К сожалению, это трудно сделать, если вы действительно хотите использовать привязку данных с ListBox (или на самом деле любой ItemsControl).

Причина в том, что нет стандартной панели, которая работает как StackPanel, но протягивает ее элементы в направлении макета.

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

Если вы этого не сделали, вам, вероятно, будет лучше создавать грид программно.

Я предполагаю, что у вас есть переменное количество элементов (иначе вы могли бы просто определить каждый из них в xaml и не нуждались бы в ListBox).

Вместо использования ListBox с привязкой данных вы также можете программно создавать ToggleButtons в сетке вместе с GridColumns, все из которых имеют размер звезды.

Конечно, вы также можете просто изменить свой дизайн и оставить кнопки влево.

Я знаю, что это неприятность, но так оно и есть.

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