ItemsControl中ScrollViewer模板化项目的零高度?

时间:2014-04-04 09:10:33

标签: wpf scrollviewer itemscontrol

我有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高度的高度。两个项目产生一半,依此类推。

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

<Style TargetType="{x:Type ItemsControl}">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <UniformGrid Columns="1" IsItemsHost="True"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>