0

我有以下代码:

<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。

有没有人有什么建议?

4

2 回答 2

0

在 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>
于 2021-02-06T19:01:52.327 回答
0

我想出了另一种方法,在我看到有一个答案等着我之前。基本上只是将我拥有的东西包装在 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>
于 2021-02-08T11:14:28.360 回答