ScrollViewer中的面板

时间:2011-10-26 19:14:56

标签: wpf layout mvvm

我的wpf应用程序中有一个有趣的问题。

我正在使用mvvm,并且项目是在绑定到视图模型的内容控件中组合的。

例如:

<Shell> 
   <ScrollViewer>
    <StackPanel>
        <ContentControl Content="{Bidning SomeVM}"/>
        <ContentControl Content="{Bidning SomeVM2}"/>
        <ContentControl Content="{Bidning SomeVM3}"/>
    </StackPanel>
   </ScrollViewer>

</Shell>

如果堆栈面板只有一个项目,它可以正常工作,但由于某种原因,每个视图(解析后的形式)都需要比实际需要更多的空间(高度)。

视图中包含GroupBox和数据网格。

所以这是我的问题,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

StackPanel将在方向的方向上测量它的无限子,默认为垂直。因此,您的物品将以无限高度进行测量,这实际上意味着它们的尺寸将达到内容 - 例如DataGrid将为列表中的每个项目分配,测量和排列记录(假设没有在控件上设置约束)。另请注意,因为它依赖于使用特定约束进行测量,因此它们将不会进行虚拟化。

注意,即使你使用了不同的面板,你也可能会得到这种行为,因为ScrollViewer中的ScrollContentPresenter会测量它的无限子节点,如果它正在执行滚动 - 如果CanContentScroll设置为false或者如果ItemsPanel会发生这种情况没有实现IScrollInfo。

我不确定您希望实现什么类型的布局,因此很难提供任何具体的建议。