首页 > 解决方案 > 无法让 ScrollViewer 在 ItemsControl>WrapPanel 中工作

问题描述

我有以下代码:

<ItemsControl
  ItemsSource="{Binding ItemsList}"
  Visibility="{Binding HmiState, Converter={StaticResource IsHmiViewState}}">
  <ItemsControl.ItemsContainerStyle>
    <Style>
      <Setter Property="FrameworkElement.Margin" Value="5" />
    </Style>
  </ItemsControl.ItemsContainerStyle>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Width=300 Height=200 ItemsHost="True"
           ScrollViewer.CanContentScroll="True"
           ScrollViewer.VerticalScrollVisibility="Auto" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>

它正确显示最高 200 高度的所有内容(包装),但不显示低于该高度的任何内容并且没有滚动条。
ItemsList 是一个 ObservableCollection。

有没有人有什么建议?

标签: wpfscrollvieweritemscontrolwrappanel

解决方案


在 ItemsControl 的 ControlTemplate 中应该有一个承载 ItemsPresenter 的 ScrollViewer:

<ItemsControl ItemsSource="{Binding ItemsList}" Width="300" Height="200">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <ScrollViewer>
                <ItemsPresenter/>
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Margin" Value="5" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

推荐阅读