Postępowałem zgodnie z tym małym "samouczkiem", jak dodać pasek przewijania do ItemsControl i działa on w widoku projektanta, ale nie wtedy, gdy kompiluję i uruchamiam program (pojawia się tylko kilka pierwszych elementów i brak paska przewijania, aby wyświetlić więcej - nawet gdy VerticalScrollbarVisibility jest ustawiona na „Visible” zamiast „Auto”).
Masz jakiś pomysł, jak to rozwiązać?
To jest kod, którego używam do wyświetlania moich elementów (zwykle pracuję z Databinding, ale aby zobaczyć elementy w moim Projektancie, dodałem je ręcznie):
<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>
A to jest mój szablon:
<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>
Musisz zmodyfikować szablon kontrolny zamiast ItemsPanelTemplate:
<ItemsControl > <ItemsControl.Template> <ControlTemplate> <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}"> <ItemsPresenter /> </ScrollViewer> </ControlTemplate> </ItemsControl.Template> </ItemsControl>
Być może Twój kod nie działa, ponieważ StackPanel ma własną funkcję przewijania. Spróbuj użyć właściwości StackPanel.CanVerticallyScroll .
źródło
Umieść ScrollViewer w DockPanel i ustaw właściwość DockPanel MaxHeight
[...] <DockPanel MaxHeight="700"> <ScrollViewer VerticalScrollBarVisibility="Auto"> <ItemsControl ItemSource ="{Binding ...}"> [...] </ItemsControl> </ScrollViewer> </DockPanel> [...]
źródło