1

私は のためにItemsPanelTemplate働くことを試みていListBoxます。はListBoxで使用されDataTemplate、暗黙的ListBoxなスタイルはデフォルトのビジュアル スタイルをオーバーライドしません。何らかの理由でItemsPanelTemplate、コントロール (a ) に指定している I'm specifiyingWrapPanelが無視され、StackPanel代わりに a が使用されます。

これはテンプレート全体です。これを引き起こしている何かが欠けているとしか思えません。

<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>
4

2 に答える 2

2

私の推測では、WrapPanel の幅プロパティにより、Stackpanel として動作するようになっています。

于 2009-12-02T15:01:54.653 に答える
0

奇妙なことに、コントロール テンプレートは明示的に指定された値をオーバーライドすることは想定されておらず、逆のシナリオが頭に浮かびます...つまり、コントロール テンプレートが「IsItemsHost」を true に設定したパネルを提供しない限りです。その後、ItemsPanel は無視されます。おそらく、これはあなたの場合です。

于 2012-07-09T13:07:37.487 に答える