WPF:ItemsControl与滚动条(ScrollViewer)

我遵循这个关于如何向ItemsControl添加滚动条的小教程,它在Designer视图中工作,但不是当我编译和执行程序时(只有前几个项目出现,没有滚动条查看更多 – 甚至当VerticalScrollbarVisibility设置为“可见”而不是“自动”)。

任何想法如何解决这个问题?


这是我用来显示我的项目的代码(通常我使用Databinding,但要查看我的devise器中的项目,我手动添加它们):

<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> 

这是我的模板:

 <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> 

为了得到一个ItemsControl的滚动条,你可以像这样在ScrollViewer托pipe它:

 <ScrollViewer VerticalScrollBarVisibility="Auto"> <ItemsControl> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> </ItemsControl> </ScrollViewer> 

您必须修改控件模板而不是ItemsPanelTemplate:

 <ItemsControl > <ItemsControl.Template> <ControlTemplate> <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}"> <ItemsPresenter /> </ScrollViewer> </ControlTemplate> </ItemsControl.Template> </ItemsControl> 

也许,你的代码不工作,因为StackPanel有自己的滚动function。 尝试使用StackPanel.CanVerticallyScroll属性。