ScrollViewer在持有ItemsControl时无界限

时间:2014-06-18 22:57:02

标签: .net wpf xaml

我有一个相当复杂的应用程序。许多(prism)UserControls持有其他UserControl等...

在这个应用程序的一个选项卡中,我有一个UserControl(非棱镜),它有一个Grid,它持有ScrollViewer,而ScrollViewer又有一个ItemsControl。

出于某种原因,ScrollViewer不受网格限制。 (我使用snoop,它显示ScrollViewer是ItemsControl中所有控件的全长。)

这导致我无法获得我需要的滚动条。

以下是它的外观:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50*" />
        <ColumnDefinition Width="50*" />
    </Grid.ColumnDefinitions>

    <!-- Other stuff here -->

    <ScrollViewer   Grid.ColumnSpan="2" Grid.Row="3"
                    VerticalScrollBarVisibility="Visible" >

            <ItemsControl   HorizontalAlignment="Stretch"
                            ItemTemplate="{StaticResource ExistingContainerTemplate}"
                            ItemsSource="{Binding ExistingContainers}"
                            FocusVisualStyle="{DynamicResource InvisibleFocusVisualStyle}" Padding="2,0,0,0">
                <i:Interaction.Behaviors>
                    <local:ScrollIntoViewForItemsControl ScrollItem="{Binding ExistingContainerItem}" />
                </i:Interaction.Behaviors>
            </ItemsControl>
    </ScrollViewer>
</Grid>

令人沮丧的是,我在Kaxaml中尝试了类似的东西,它运行得很好:

  <Grid>  
    <ScrollViewer Width="200" BorderBrush="Black" BorderThickness="5">
      <ItemsControl>
        <Rectangle Fill="Green" Width="100" Height="100"/>
        <Rectangle Fill="Red" Width="100" Height="100"/>
        <Rectangle Fill="Blue" Width="100" Height="100" />
        <Rectangle Fill="Black" Width="100" Height="100"/>
      </ItemsControl>
    </ScrollViewer>
  </Grid>

如果您有任何想法如何将这个限制在网格中,我很乐意听到它。

1 个答案:

答案 0 :(得分:0)

事实证明,我有一个网格,所有这些网格都有一个RowDefinition,其高度为“Auto”。

因为它是自动的,所以内容越来越适合所有内容。

一旦我将其切换为*它工作正常。