20

让我们阅读这些代码,我在 Windows Phone 8 项目中定义了两个类似的 UserControl,我真的想知道它们中的哪个更好。我检查了配置文件,似乎它们几乎相同。

UserControl 1,使用网格的属性来设计我的布局。

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Rectangle Grid.RowSpan="2" Grid.Row="0" Height="108" Width="54" Fill="Blue"></Rectangle>
    <TextBlock Grid.Row="0" Grid.Column="1" Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock>
    <TextBlock Grid.Row="1" Grid.Column="1" Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock>
</Grid>

UserControl 2,使用 StackPanel 来设计我的布局。

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108">
    <StackPanel Orientation="Horizontal">
        <Rectangle Height="108" Width="54" Fill="Red"></Rectangle>
        <StackPanel Orientation="Vertical">
            <TextBlock Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock>
            <TextBlock Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock>
        </StackPanel>
    </StackPanel>
</Grid>

看起来基本布局是一样的。但是当我使用 XAML Spy 分析可视化树时,UserControl 1 的节点较少,但它会花费更多的内存。为什么?

4

1 回答 1

34

您可能对这个问题的答案感兴趣:在渲染时间和性能方面,面板按什么顺序最有效?

简短的回答是这取决于面板有多少个子元素,以及这些元素的大小和位置。但在大多数情况下,aStackPanel将比 a 更有效,Grid因为它具有更快的测量和排列通道。

引用已接受的答案

网格

定义由列和行组成的灵活网格区域。

如果使用按比例调整大小或自动调整大小,这可能是性能最密集的面板。计算子项大小可以是项的本机大小和网格指定的布局的复杂组合。布局也是所有面板中最复杂的。测量传递的性能慢到中等,排列传递的性能慢到中等。

堆栈面板

将子元素排列成可以水平或垂直定向的单行。

StackPanel 使用与其方向相反的方向上的本机或相对大小以及在其方向上的本机大小来测量其子项(对齐在此方向上不做任何事情)。这使其成为该领域的中级执行者。安排通行证很简单,只是按顺序排列项目。可能是本次传球的第二好表现。测量传递的中等性能和布局传递的快速性能。

同样关于内存消耗,两个对象都不同,占用的内存量也不同,并且 a Gridhas RowDefinitionsand ColumnDefinitions,所以它实际上包含的对象比你的要多StackPanel

于 2013-03-22T17:02:58.953 回答