J'ai suivi ceci 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 sont visibles et aucune barre de défilement à afficher davantage - 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 les voir 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>
Pour obtenir une barre de défilement pour un ItemsControl
, vous pouvez l'héberger dans un ScrollViewer
comme ceci:
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl>
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
</ItemsControl>
</ScrollViewer>
Vous devez modifier le modèle de contrôle à la place de ItemsPanelTemplate:
<ItemsControl >
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
Peut-être que votre code ne fonctionne pas car StackPanel possède sa propre fonctionnalité de défilement. Essayez d'utiliser la propriété StackPanel.CanVerticallyScroll .
Placez votre ScrollViewer dans un DockPanel et définissez la propriété DockPanel MaxHeight
[...]
<DockPanel MaxHeight="700">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemSource ="{Binding ...}">
[...]
</ItemsControl>
</ScrollViewer>
</DockPanel>
[...]