【发布时间】:2015-02-25 13:26:30
【问题描述】:
在设计 WPF 应用程序时,使用多个嵌套面板(因为它们被设计为使用)或硬编码大多数控件的边距并将它们放在一个面板中(例如网格)在性能方面更好? 比如上面的设计,我们可以这样写:
<StackPanel>
<TextBlock Text="اطلاعات خود را وارد نمایید:" VerticalAlignment="Top"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="نام: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCFirstName" VerticalAlignment="Top"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="نام خانوادگی: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCLastName" VerticalAlignment="Top"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="تلفن منزل: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCHomeNumber" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="تلفن همراه: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCMobileNumber" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
</StackPanel>
<StackPanel Grid.Column="1">
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="شرکت: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCCompany" VerticalAlignment="Top"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="سمت: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCTitle" VerticalAlignment="Top"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="تلفن کاری: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCWorkNumber" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="وب سایت: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCWebSite" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
</StackPanel>
</Grid>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="ایمیل شخصی: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCPersonalEmail" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="ایمیل کاری: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCWorkEmail" VerticalAlignment="Top" FlowDirection="LeftToRight"/>
</DockPanel>
<DockPanel LastChildFill="True" Margin="5, 3">
<TextBlock Text="آدرس: " VerticalAlignment="Top" HorizontalAlignment="Left"/>
<TextBox x:Name="tbVCAddress" VerticalAlignment="Top"/>
</DockPanel>
</StackPanel>
或者我们可以将它们全部声明在一个网格中并赋予它们边距。
This article 说“在许多情况下,由于它作为布局容器的灵活性,可以使用 Grid 元素代替嵌套面板。这可以通过将不必要的元素排除在树之外来提高应用程序的性能。”但这对我来说似乎很奇怪!
上述实现中哪一个对运行时渲染性能更好,为什么?
【问题讨论】: