我有ItemsControl
个任意项目。有些项目包含在ScrollViewer
内。这些可滚动项目的代码隐藏使用ViewportWidth
(几乎相当于ActualWidth
)和ViewportHeight
(几乎相当于ActualHeight
)属性来排列/调整其视觉大小儿童。只要我没有将项目放在ItemsControl
中,这就有效。当项目显示在ItemsControl
中时,ViewportHeight
的值等于0 - 有效地使我的项目不可见。请注意,我想垂直排列项目,使所有项目的高度相等!没有花哨的东西,只是常规的StackPanel
。
使用DataType
自动应用模板:
<MyControl.Resources>
<DataTemplate DataType="{x:Type MyScrollableItem}">
<MyControlWrappedInScrollViewer Text="{Binding Text}" />
</DataTemplate>
<DataTemplate DataType="{x:Type MyItem}">
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</MyControl.Resources>
<ItemsControl ItemsSource="{Binding MyCollection}" />
MyControlWrappedInScrollViewer
的结构看起来像这样:
<UserControl>
<Grid>
<ScrollViewer CanContentScroll="True">
<Canvas />
</ScrollViewer>
</Grid>
</UserControl>
为什么ScrollViewer
的高度为0?如何告知我的ItemsControl
适当调整项目大小?例如一个项目产生ItemsControl高度的高度。两个项目产生一半,依此类推。
答案 0 :(得分:0)
这就是诀窍:
<Style TargetType="{x:Type ItemsControl}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Columns="1" IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>