WPF ItemsPanelTemplate ne fonctionne pas
-
11-09-2019 - |
Question
Je suis en train d'obtenir un ItemsPanelTemplate
travaillant pour un ListBox
. Le ListBox
est utilisé dans un DataTemplate
, et aucun de mes styles ListBox
implicites passer outre le style visuel par défaut. Pour une raison quelconque, le ItemsPanelTemplate
je specifiying pour le contrôle (un WrapPanel
) est ignorée et un StackPanel
est utilisé à la place.
Ceci est le modèle entier, je ne peux que supposer qu'il ya quelque chose que je suis absent qui est à l'origine de cette.
<DataTemplate x:Key="GroupLargeIconsTemplate" DataType="{x:Type Core:IGroup}">
<ListBox ItemsSource="{Binding Children}" OverridesDefaultStyle="True">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel HorizontalAlignment="Left" VerticalAlignment="Top" IsItemsHost="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"
Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<conv:IconConverter x:Key="IconConverter"/>
</DataTemplate.Resources>
<StackPanel Margin="2" Width="100" Height="140">
<Image Source="{Binding Icon,Converter={StaticResource IconConverter},ConverterParameter=96}"/>
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
La solution
Je suppose que la propriété largeur du WrapPanel fait qu'il se comporte comme un StackPanel.
Autres conseils
Etrange, le modèle de contrôle n'est pas censé remplacer les valeurs spécifiées explicitement, plutôt le scénario inverse vient à l'esprit ... Autrement dit, à moins que le modèle de contrôle fournit un panneau avec « IsItemsHost » valeur true. Ensuite, la ItemsPanel est ignorée. Ce qui, sans doute, est votre cas.