J'ai suivi ce petit "tutoriel" sur la façon d'ajouter une barre de défilement à un ItemsControl, et cela fonctionne en mode Designer, mais pas lorsque je compile et exécute le programme (seuls les premiers éléments apparaissent, et aucune barre de défilement pour en voir plus - même lorsque VerticalScrollbarVisibility est défini sur "Visible" au lieu de "Auto").
Une idée sur la façon de résoudre ce problème?
C'est le code que j'utilise pour afficher mes éléments (normalement je travaille avec Databinding, mais pour voir les éléments dans mon Designer, je les ai ajoutés manuellement):
<ItemsControl x:Name="itemCtrl" Style="{DynamicResource UsersControlStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top">
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
</ItemsControl>
Et voici mon modèle:
<Style x:Key="UsersControlStyle" TargetType="{x:Type ItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
<ScrollViewer VerticalScrollBarVisibility="Visible">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Vous devez modifier le modèle de contrôle au lieu de ItemsPanelTemplate:
Peut-être que votre code ne fonctionne pas car StackPanel a sa propre fonctionnalité de défilement. Essayez d'utiliser la propriété StackPanel.CanVerticallyScroll .
la source
Placez votre ScrollViewer dans un DockPanel et définissez la propriété DockPanel MaxHeight
la source