Seguí este pequeño "tutorial" sobre cómo agregar una barra de desplazamiento a un ItemsControl, y funciona en la vista del Diseñador, pero no cuando compilo y ejecuto el programa (solo aparecen los primeros elementos y ninguna barra de desplazamiento para ver más, incluso cuando VerticalScrollbarVisibility se establece en "Visible" en lugar de "Auto").
¿Alguna idea sobre cómo resolver esto?
Este es el código que uso para mostrar mis elementos (normalmente trabajo con Databinding, pero para ver los elementos en mi Diseñador los agregué manualmente):
<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>
Y esta es mi plantilla:
<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>
Debe modificar la plantilla de control en lugar de ItemsPanelTemplate:
Tal vez, su código no funciona porque StackPanel tiene su propia funcionalidad de desplazamiento. Intente utilizar la propiedad StackPanel.CanVerticallyScroll .
fuente
Coloque su ScrollViewer en un DockPanel y configure la propiedad DockPanel MaxHeight
fuente