WPF ItemsPanelTemplate non funziona
-
11-09-2019 - |
Domanda
Sto cercando di ottenere un ItemsPanelTemplate
lavorare per un ListBox
. Il ListBox
viene utilizzato in un DataTemplate
, e nessuno dei miei stili ListBox
implicite ignorare lo stile di visualizzazione di default. Per qualche ragione, la ItemsPanelTemplate
sto specifiying per il controllo (un WrapPanel
) viene ignorato e StackPanel
viene utilizzato al posto.
Questa è l'intero modello, posso solo supporre che c'è qualcosa che mi manca, che sta causando questo.
<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>
Soluzione
La mia ipotesi è che la proprietà larghezza nella WrapPanel sta rendendo comportarsi come uno StackPanel.
Altri suggerimenti
Strano, il modello di controllo non dovrebbe ignorare i valori esplicitamente specificati, piuttosto lo scenario opposto mi viene in mente ... Cioè, a meno che il modello di controllo fornisce un pannello con "IsItemsHost" impostata su true. Poi l'ItemsPanel viene ignorato. Il che, probabilmente, è il vostro caso.