无法让 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>
我有以下代码:
<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>