带滚动条的 ItemsControl (ScrollViewer)

我按照 这个的小“教程”学习了如何在 ItemsControl 中添加滚动条,它在 Designer 视图中可以工作,但是在编译和执行程序时却不能工作(只有前几个项目显示,没有滚动条可以查看更多——即使当 VerticalScrollbarVisiability 被设置为“可见”而不是“自动”)。

有办法解决吗?


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

<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>
119821 次浏览

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

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

也许,您的代码不工作,因为 StackPanel 有自己的滚动功能。

为了得到一个 ItemsControl的滚动条,你可以把它放在一个像下面这样的 ScrollViewer中:

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

将 ScrollViewer 放入 DockPanel 并设置 DockPanel MaxHeight 属性

[...]
<DockPanel MaxHeight="700">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemSource ="{Binding ...}">
[...]
</ItemsControl>
</ScrollViewer>
</DockPanel>
[...]