Question

Je suis en train d'échanger le ItemsPanel dans une zone de liste pour une WrapPanel mais le ItemsPanelTemplate sur le style ne semble pas être un effet. Le style est trouvé et appliqué parce que les couleurs de frontière et de fond le changement, mais l'inspection avec Snoop montre pas WrapPanel.

<Style x:Key="CocktailGrid" TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="Background" Value="White" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="BorderBrush" Value="Black" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="SelectionMode" Value="Single" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <WrapPanel
                     IsItemsHost="True"
                     Width="{Binding
                              Path=ActualWidth,
                              RelativeSource={RelativeSource
                                  Mode=FindAncestor,
                                  AncestorType=
                                     {x:Type ScrollContentPresenter}}}" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="80" />
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Image Grid.Row="0" Source="{Binding ImageName}" Height="80" Stretch="Uniform"/>
                    <TextBlock Grid.Row="1" Text="{Binding Name}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
                </Grid>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Le ListBox est déclaré:

<ListBox x:Name="lstCocktails" PreviewKeyDown="dg_PreviewKeyDown" ItemsSource="{Binding Source={StaticResource drinksSource}}" SelectedItem="{Binding SelectedItem,ElementName=root,Mode=TwoWay}" Style="{StaticResource CocktailGrid}"
             SelectionMode="Single" MouseDoubleClick="lstCocktails_MouseDoubleClick">

Snoop arbre visuel: arbre visuel Snoop

J'ai ItemsPanels redéfinis dans d'autres parties de l'application, mais pour une raison quelconque celui-ci me éludant

Était-ce utile?

La solution

Utilisez ce lieu de ItemsTemplate

        <Setter Property="Template">
           <Setter.Value>
              <ControlTemplate TargetType="ListBox">
                 <Border Background="{TemplateBinding ListBox.Background}" CornerRadius="5">
                    <WrapPanel IsItemsHost="True"/>
                 </Border>
              </ControlTemplate>
           </Setter.Value>
        </Setter>

Il fonctionne

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top