Stretch ListBox Предметы поражают область до полной ширины ListBox? Стиль ListBox задается бесплодностью через тему

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

У меня есть базовый список, и каждое содержимое элемента является простой строкой.

Сам ListBox растягивается, чтобы заполнить контейнер grid, но каждый элемент ListBoxItem hitarea не отражает ширину ListBox. Похоже, что hitarea (область контакта указателя) для каждого элемента - это только ширина текстового содержимого. Как сделать это растягивание полностью, независимо от размера текста.

Я установил HorizontalContentAlignment в Stretch, но это не решает мою проблему. Моя единственная догадка заключается в том, что контент на самом деле растягивается, но фон невидим и поэтому не захватывает указатель мыши.

<ListBox 
    Grid.Row="1"
    x:Name="ProjectsListBox" 
    DisplayMemberPath="Name"
    ItemsSource="{Binding Path=Projects}" 
    SelectedItem="{Binding Path=SelectedProject}"
    HorizontalContentAlignment="Stretch"/>

XAML довольно прямолинейна. Если я наложена над текстом в одном из элементов, тогда вся ширина элемента станет активной. Думаю, мне просто нужно знать, как создать интерактивный фон, который невидим.

Ответ 1

HorizontalContentAlignment="Stretch" должен быть установлен в ItemContainerStyle, чтобы это работало.

Пример Xaml

<ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.ItemsSource>
        <x:Array Type="{x:Type sys:String}">
            <sys:String>String 1</sys:String>
            <sys:String>String 2</sys:String>
            <sys:String>String 3</sys:String>
            <sys:String>String 4</sys:String>
        </x:Array>
    </ListBox.ItemsSource>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" Background="Green"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Обновление
Попробуйте это

<ListBox ...>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>

Ответ 2

Кроме того, добавив к Fredrik ответ, если вы установите для свойства ListBox ScrollViewer.HorizontalScrollBarVisibility значение Disabled, элементы всегда будут иметь точно ширину списка ListBox.