在stackpanel中统一元素大小

时间:2012-07-02 09:18:04

标签: silverlight

我需要帮助统一stackpanel中元素的大小

 void MainPageLoaded(object sender, RoutedEventArgs e)
    {
        var random = new Random();

        for (var i = 0; i < 5; i++)
        {
            var grid = new Grid();

            var border = new Border()
                             {
                                 Height = random.Next(50, 150),
                                 Width = random.Next(50, 150),
                                 Margin = new Thickness(10),
                                 BorderBrush = new SolidColorBrush(Colors.White),
                                 BorderThickness = new Thickness(1)
                             };

            grid.Children.Add(border);

            imageBoxesStackPanel.Children.Add(grid);
        }

var h = imageBoxesStackPanel.Children.Max(n =&gt; n.DesiredSize.Height);

我想要实现的是在stackpanel中找到每个网格的最大高度和最大宽度,并将其应用于所有网格。问题是所需的大小总是错误的。

2 个答案:

答案 0 :(得分:1)

在WPF中有UniformGrid来完成这项工作,但不幸的是,默认情况下它没有为Silverlight实现。有几种替代方案,例如this one

答案 1 :(得分:1)

您只能在measure/arrange pass后以自定义方式执行此操作,之后才能看到尺寸。 之后(在您拥有的OnLoaded事件中),您可以使用网格的ActualHeightActualWidth

简而言之:

var h = imageBoxesStackPanel.Children.Max(n => n.ActualHeight);

但这对性能不利,会触发另一次布局传递。

说明: 在WPF中,最佳解决方案是SharedSizeGroupUniformGrid。这不是在Silverlight中实现的,但有些人拥有implemented it