Как получить ListBox ItemTemplate, чтобы растянуть по горизонтали всю ширину ListBox?
Я хочу, чтобы ListItems расширил с оранжевым фоном всю ширину списка.
В настоящее время они только ширины 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>
Ответы
Ответ 1
Я уверен, что это дубликат, но я не могу найти вопрос с тем же ответом.
Добавьте HorizontalContentAlignment="Stretch"
в свой ListBox. Это должно делать свое дело. Просто будьте осторожны с автозаполнением, потому что так легко получить HorizontalAlignment
по ошибке.
Ответ 2
Я нашел другое решение здесь, так как я столкнулся с обоими сообщениями...
Это ответ от Myles:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
Это сработало для меня.
Ответ 3
Если ваши элементы шире, чем ListBox
, другие ответы здесь не помогут: элементы в ItemTemplate
остаются шире, чем ListBox
.
Исправление, которое сработало для меня, состояло в том, чтобы отключить горизонтальную полосу прокрутки, которая, по-видимому, также сообщает контейнеру всех этих элементов, что они остаются такими же широкими, как и список.
Следовательно, объединенное исправление для получения элементов ListBox, которые являются такими же широкими, как и поле списка, будь они меньшими и нуждаются в растяжении или шире, и требует обертывания, выглядит следующим образом:
<ListBox HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
(кредиты для прокрутки >
Ответ 4
Поскольку граница используется только для визуального отображения, вы можете поместить ее в элемент управления ListBoxItem ControlTemplate и изменить свойства там. В ItemTemplate вы можете разместить только StackPanel и TextBlock. Таким образом, код также остается чистым, так как при появлении управления управление будет контролироваться с помощью ControlTemplate, а данные, которые будут отображаться, будут контролироваться с помощью DataTemplate.
Ответ 5
Исправление для меня состояло в том, чтобы установить свойство HorizontalAlignment="Stretch"
на ItemsPresenter
внутри 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>
Ответ 6
У меня также была такая же проблема, как быстрый обходной путь, я использовал смесь, чтобы определить, сколько добавлений добавлено. В моем случае это было 12, поэтому я использовал отрицательный запас, чтобы избавиться от него. Теперь все можно правильно центрировать.