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

很好,谢谢! – Xuntar 2010-01-08 16:28:28

+13

当你看到它时非常明显......因为我是来自Windows Forms,我经常发现自己陷入了错误的思维模式。看来WPF维权很多...... +1。 – 2010-11-09 08:26:14

+3

非常感谢 - 非常有帮助。我同意莱特的观点,即我的WinForms大脑最初不会“得到”这个。 – itsmatt 2010-12-14 20:22:52

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

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

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

+1

的StackPanel的CanVerticallyScroll属性没有工作,我很害怕。 – Xuntar 2010-01-08 16:29:03

+0

StackPanel CanVerticallyScroll没有工作,但这里给出的代码示例适用于我。谢谢 – 2011-05-31 18:43:54

+0

这工作。我正在寻找使scrollviewer而不是外部,因为https://github.com/punker76/gong-wpf-dragdrop需要它。 – HelloSam 2013-07-25 05:32:25