WPF:使用滚动条的ItemsControl(滚动查看器)
问题描述:
我跟着this关于如何向ItemsControl添加滚动条的小教程,它在Designer视图中工作,但不是当我编译和执行程序时(只有前几项显示出来,并且没有滚动条可以查看更多 - 即使VerticalScrollbarVisibility设置为“可见”而不是“自动”时)。WPF:使用滚动条的ItemsControl(滚动查看器)
关于如何解决这个问题的任何想法?
这是我用它来显示我的物品(一般我用数据绑定工作,但看到我设计的项目我手动添加它们)的代码:
<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
这样承载它:
<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有自己的滚动功能。尝试使用StackPanel.CanVerticallyScroll属性。
很好,谢谢! – Xuntar 2010-01-08 16:28:28
当你看到它时非常明显......因为我是来自Windows Forms,我经常发现自己陷入了错误的思维模式。看来WPF维权很多...... +1。 – 2010-11-09 08:26:14
非常感谢 - 非常有帮助。我同意莱特的观点,即我的WinForms大脑最初不会“得到”这个。 – itsmatt 2010-12-14 20:22:52