2012-07-02 50 views
0

我需要幫助的元素統一大小的StackPanel統一在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 => n.DesiredSize.Height);

我想要實現的是在stackpanel中查找每個網格的最大高度和最大寬度並將其應用於所有網格。問題是所需的尺寸總是錯誤的。

回答

1

您只能在measure/arrange pass之後以自定義的方式完成此操作,然後尺寸將不可見。 之後(在OnLoaded事件中),您可以使用網格的ActualHeightActualWidth

簡而言之:

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

但是,這是對性能不好,會引發另一個佈局傳遞。

備註: 在WPF中,最好的解決方案是SharedSizeGroupUniformGrid。這在Silverlight中沒有實現,但有些人擁有implemented it

+0

太棒了! UniformGrid完全做了我需要的!萬分感謝! – Jeff

1

在WPF中有UniformGrid來完成這項工作,但不幸的是它默認情況下沒有爲Silverlight實現。有幾種可供選擇的方式,例如this one

+0

謝謝,它解決了! – Jeff