0

我需要帮助统一堆栈面板中元素的大小

 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 => n.DesiredSize.Height);

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

4

2 回答 2

1

在 WPF 中UniformGrid可以完成这项工作,但不幸的是,默认情况下它没有为 Silverlight 实现。它有几种选择,例如这个

于 2012-07-02T09:36:44.120 回答
1

您只能在measure/arrange pass之后以自定义方式执行此操作,在此之前尺寸将不可见。之后(OnLoaded如果有的话),您可以使用网格的ActualHeightand ActualWidth

简而言之:

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

然而,这对性能不利,并且会触发另一个布局传递。

备注:在 WPF 中,最好的解决方案是 aSharedSizeGroup或 a UniformGrid。这在 Silverlight 中没有实现,但有人已经实现了

于 2012-07-02T09:46:57.783 回答