wpf - 无法让 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。
有没有人有什么建议?
解决方案
在 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>
推荐阅读
- php - 基于 PHP 值的颜色表单元格
- c++ - 能够通过可变参数模板以点积方式将 C++ 11 中的两个参数包相乘
- docker - 安装项目 docker ubuntu 时返回非零代码
- html - 使用css将文本限制为输入框的大小
- java - 如何在tomcat文件夹中写入文件?
- android - 剪切视频时找不到合适的输出格式
- python - 在 Keras 中返回时间步的隐藏状态序列
- docker - Ballerina:构建镜像并通过 k8s 插件推送到 gcr.io
- html - CSS - 仅类型选择器未正确应用
- ibm-cloud - 如何检索 IBM Cloud Object Storage 中对象的 URL?