【问题标题】:Panels inside a ScrollViewerScrollViewer 内的面板
【发布时间】:2011-10-27 04:13:39
【问题描述】:

我在我的 wpf 应用程序中遇到了一个有趣的问题。

我正在使用 mvvm,项目由绑定到视图模型的内容控件组成。

例如:

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

</Shell>

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

如果需要的话,视图包含一个 GroupBox 和一个数据网格。

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

【问题讨论】:

  • 你试过删除stackpanel吗?
  • sll:然后呢?我不能放一个以上的孩子..

标签: wpf layout mvvm


【解决方案1】:

StackPanel 将在 Orientation 的方向上用 Infinity 测量它的孩子,默认情况下是 Vertical。因此,您的物品将以无限的高度进行测量,这基本上意味着它们将根据内容调整大小 - 例如DataGrid 将为列表中的每个项目分配、测量和排列记录(假设没有在控件上设置任何约束)。还要注意,它们不会因此而成为虚拟化,因为这依赖于使用特定约束进行测量。

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

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

【讨论】:

  • 我正在使用滚动查看器进行缩放,我希望三个内容填充可见的屏幕大小,并且在缩放时滚动应该开始起作用并且条形变得可见。
  • 当 DataGrid 等可能有滚动条时,您如何看待它的工作原理?因此,为了清楚起见,您希望三个控件每个都具有窗口高度的 3 分之一。因此,当您缩放时,您希望这些控件仍被测量/排列,就好像它们是高度的三分之一,但使用渲染转换等来放大每个控件的内容?
猜你喜欢
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多