Frage

Ich versuche, das ItemsPanel in einer Listbox gegen einen Wrappanel auszutauschen, aber die ItemsPaneltemplate auf dem Stil scheint keinen Effekt zu haben. Der Stil wird gefunden und angewendet, da sich die Grenze und die Hintergrundfarben ändern, aber die Inspektion mit Snoop zeigt keine 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>

Die Listbox ist deklariert als:

<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 visueller Baum:Snoop visual tree

Ich habe ItemsPanels in anderen Teilen der App überschrieben, aber aus irgendeinem Grund entgeht mir diese

War es hilfreich?

Lösung

Verwenden Sie dies anstelle von itemStemplate

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

Es klappt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top