WPF ItemsPanelTemplate не работает
-
11-09-2019 - |
Вопрос
Я пытаюсь получить ItemsPanelTemplate
работая на ListBox
.Тот самый ListBox
используется в DataTemplate
, и ни одно из моих неявных ListBox
стили переопределяют визуальный стиль по умолчанию.По какой-то причине ItemsPanelTemplate
Я указываю для элемента управления (a WrapPanel
) игнорируется , и StackPanel
используется вместо этого.
Это весь шаблон целиком, я могу только предположить, что я чего-то не хватает, что является причиной этого.
<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>
Решение
Я предполагаю, что свойство width в WrapPanel заставляет его вести себя как Stackpanel.
Другие советы
Странно, шаблон управления не должен переопределять явно указанные значения, скорее мне приходит в голову противоположный сценарий...То есть, если только шаблон управления не предоставляет панель с "IsItemsHost", для которой установлено значение true.Тогда ItemsPanel игнорируется.Как, вероятно, и в вашем случае.