Как заставить элемент ListBox ItemTemplate растягиваться по горизонтали на всю ширину списка?
Я хочу иметь элементам списка, чтобы расширить их оранжевый фон на всю ширину элемента управления ListBox.
В настоящее время они только так широки, как FirstName + LastName.
Я установил каждый элемент, который я могу: HorizontalAlignment= "Stretch".
Я хочу, чтобы фон ListboxItems расширялся по мере того, как пользователь растягивает Listbox, поэтому я не хочу вводить абсолютные значения.
что мне нужно сделать, чтобы цвет фона в ListBoxItems заполнить ширину элемента управления ListBox?
<Window x:Class="TestListBoxSelectedItemStyle.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestListBoxSelectedItemStyle"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:CustomerViewModel x:Key="TheDataProvider"/>
<DataTemplate x:Key="CustomerItemTemplate">
<Border CornerRadius="5" Background="Orange" HorizontalAlignment="Stretch" Padding="5" Margin="3">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Width="Auto">
<TextBlock HorizontalAlignment="Stretch">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=GetAllCustomers, Source={StaticResource TheDataProvider}}"
ItemTemplate="{StaticResource CustomerItemTemplate}"/>
</Grid>
</Window>
6 ответов:
Я уверен, что это дубликат, но я не могу найти вопрос с таким же ответом.
добавить
HorizontalContentAlignment="Stretch"
в ваш список. Это должно сработать. Просто будьте осторожны с автозаполнением, потому что это так легко получитьHorizontalAlignment
по ошибке.
нашел другое решение здесь, так как я столкнулся с обоими постами...
Это из ответа Майлза:
<ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> </Style> </ListBox.ItemContainerStyle>
это сработало для меня.
если ваш заказ широкое чем
ListBox
, другие ответы здесь не помогут: элементы вItemTemplate
остаются шире, чемListBox
.исправление, которое сработало для меня, состояло в том, чтобы отключить горизонтальную полосу прокрутки, которая, по-видимому, также сообщает контейнеру всех этих элементов оставаться только шириной со списком.
следовательно, комбинированное исправление для получения элементов списка, которые имеют ширину списка, будь они меньше и нуждаются в растяжении, или шире и нужна упаковка, выглядит следующим образом:
<ListBox HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
поскольку граница используется только для визуального отображения, вы можете поместить ее в Панель управления ListBoxItem и изменить свойства там. В ItemTemplate можно разместить только StackPanel и TextBlock. Таким образом, код также остается чистым, так как внешний вид элемента управления будет контролироваться через ControlTemplate, а отображаемые данные будут контролироваться через DataTemplate.
исправление для меня было установить собственность
HorizontalAlignment="Stretch"
onItemsPresenter
внутриScrollViewe
r..надеюсь, это кому-то поможет...
<Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBox"> <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch"> <ItemsPresenter Height="252" HorizontalAlignment="Stretch"/> </ScrollViewer> </ControlTemplate> </Setter.Value> </Setter>