如何使StackPanel的子元素向下填充最大空间?

77 浏览
0 Comments

如何使StackPanel的子元素向下填充最大空间?

我只是想在左侧有流动的文字,在右侧有一个帮助框。

帮助框应该一直延伸到底部。

如果你去掉下面的外部StackPanel,它的效果非常好。

但由于布局问题(我正在动态插入用户控件),我需要包装StackPanel

如何让GroupBox扩展到StackPanel的底部,你可以看到我已经尝试过:

  • VerticalAlignment=\"Stretch\"
  • VerticalContentAlignment=\"Stretch\"
  • Height=\"Auto\"

XAML:

    
        
            
                
            
            
                
            
        
    

回答:

谢谢Mark,使用DockPanel代替StackPanel解决了问题。总的来说,我发现现在越来越多地使用DockPanel进行WPF布局,这里是修复后的XAML:

    
        
            
                
                    
                
            
            
                
            
        
    

admin 更改状态以发布 2023年5月22日
0
0 Comments

发生这种情况的原因是,堆栈面板对沿着它对齐元素的轴线的约束条件将每个子元素测量为正无穷。子控件必须返回它们想要的大小(正无穷在任一轴上都不是从MeasureOverride返回的有效值),因此它们返回最小尺寸,使其中的所有内容都能适应。它们不知道自己需要填充多少空间。

如果您的视图不需要具有滚动功能,并且上面的答案不合适,我建议您实现自己的面板。您可能可以直接从StackPanel派生,然后您所需要做的就是更改ArrangeOverride方法,以便将剩余的空间分配给其子元素(使它们每个人都有相同的额外空间)。如果给它们更多的空间,元素应该会呈现良好,但如果给它们更少的话,您将开始看到故障。

如果您想要能够滚动整个视图,则恐怕情况会更加困难,因为ScrollViewer为您提供了无限的空间,这将使您处于原始子元素的位置。在这种情况下,您可能需要在新面板上创建一个新属性,允许您指定视口大小,您应该能够将其绑定到ScrollViewer的大小上。理想情况下,您应该实现IScrollInfo,但如果您要完全实现它,那就开始变得复杂了。

0
0 Comments

看起来你想要一个StackPanel,其中最后一个元素使用了所有剩余的空间。但为什么不使用DockPanel呢?用DockPanel.Dock="Top"装饰DockPanel中的其他元素,然后您的帮助控件可以填充剩余的空间。

XAML:


    Something
    Something else
    
      
        
     
      
          
      
    

如果您使用不支持DockPanel的平台(例如WindowsStore),则可以使用网格创建相同的效果。以下是使用网格完成以上示例:


    
        
        
    
    
        Something
        Something else
    
    
        
            
            
        
        
            
        
        
            
        
    

0