WPF ItemsPanelTemplate不起作用

时间:2009-12-02 12:52:04

标签: wpf data-binding listbox itemscontrol itemspanel

我正在努力让ItemsPanelTemplateListBox工作。 ListBox用于DataTemplate,我的隐式ListBox样式都不会覆盖默认的视觉样式。出于某种原因,我正在忽略我为控件指定的ItemsPanelTemplateWrapPanel),而是使用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>

2 个答案:

答案 0 :(得分:1)

我的猜测是WrapPanel中的width属性使其表现为Stackpanel。

答案 1 :(得分:0)

奇怪的是,控件模板不应该覆盖明确指定的值,而是我想到的相反情况...... 也就是说,除非控件模板提供一个“IsItemsHost”设置为true的面板。然后忽略ItemsPanel。可能是你的情况。