无法让 ScrollViewer 在 ItemsControl>WrapPanel 中工作

Can't get ScrollViewer to work within 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 高度以内的所有内容(环绕),但不显示低于 200 高度的任何内容,并且没有滚动条。
ItemsList 是一个 ObservableCollection。

有人有什么建议吗?

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>

我想出了另一个办法,才看到有答案在等着我。基本上只是将我拥有的内容包装在 ScrollViewer 中。一个比另一个“更好”吗?

<ScrollViewer Width=300 Height=200
   ScrollViewer.CanContentScroll="True"
   ScrollViewer.VerticalScrollVisibility="Auto"
   <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 ItemsHost="True"/>
       </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
   </ItemsControl>
</ScrollViewer>