Растянуть элементы списка ударить область на всю ширину списка? Стиль ListBox устанавливается implicity через тему

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

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

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

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

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

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

2 ответов


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>

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