我需要帮助统一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中找到每个网格的最大高度和最大宽度,并将其应用于所有网格。问题是所需的大小总是错误的。
答案 0 :(得分:1)
在WPF中有UniformGrid
来完成这项工作,但不幸的是,默认情况下它没有为Silverlight实现。有几种替代方案,例如this one
答案 1 :(得分:1)
您只能在measure/arrange pass后以自定义方式执行此操作,之后才能看到尺寸。
之后(在您拥有的OnLoaded
事件中),您可以使用网格的ActualHeight
和ActualWidth
。
简而言之:
var h = imageBoxesStackPanel.Children.Max(n => n.ActualHeight);
但这对性能不利,会触发另一次布局传递。
说明:
在WPF中,最佳解决方案是SharedSizeGroup
或UniformGrid
。这不是在Silverlight中实现的,但有些人拥有implemented it。