Je veux que les ListItems étendent avec leur fond orange la pleine largeur de la Listbox.
Actuellement, ils sont aussi larges que FirstName + LastName.
J'ai défini tous les éléments que je peux: HorizontalAlignment = "Stretch".
Je veux que l'arrière-plan des ListboxItems se développe lorsque l'utilisateur étire la Listbox, donc je ne veux pas mettre de valeurs absolues.
Que dois-je faire pour que la couleur d'arrière-plan des ListBoxItems remplisse la largeur de la 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>
la source
J'ai trouvé une autre solution ici , car j'ai rencontré les deux postes ...
C'est de la réponse de Myles:
Cela a fonctionné pour moi.
la source
Si vos articles sont plus larges que le
ListBox
, les autres réponses ici ne seront d'aucune aide: les articles duItemTemplate
restent plus larges que leListBox
.Le correctif qui a fonctionné pour moi était de désactiver la barre de défilement horizontale, qui, apparemment, indique également au conteneur de tous ces éléments de rester aussi large que la zone de liste.
Par conséquent, le correctif combiné pour obtenir des éléments ListBox qui sont aussi larges que la zone de liste, qu'ils soient plus petits et nécessitent un étirement, ou plus larges et doivent être encapsulés, est le suivant:
( crédits pour l'idée de la barre de défilement )
la source
Étant donné que la bordure est utilisée uniquement pour l'apparence visuelle, vous pouvez la placer dans le ControlTemplate de ListBoxItem et y modifier les propriétés. Dans le ItemTemplate, vous pouvez placer uniquement le StackPanel et le TextBlock. De cette façon, le code reste également propre, car dans l'apparence du contrôle sera contrôlé via le ControlTemplate et les données à afficher seront contrôlées via le DataTemplate.
la source
La solution pour moi était de définir la propriété
HorizontalAlignment="Stretch"
à l'ItemsPresenter
intérieur deScrollViewe
r ..J'espère que cela aide quelqu'un ...
la source
J'ai également eu le même problème, comme solution rapide, j'ai utilisé le mélange pour déterminer la quantité de rembourrage ajoutée. Dans mon cas, c'était 12, j'ai donc utilisé une marge négative pour m'en débarrasser. Maintenant, tout peut maintenant être correctement centré
la source