2010-02-21 56 views
4

布置以下项目的最佳做法是什么?WPF/Silverlight布局最佳实践

Valid XHTML http://www.hughgrice.com/layout.gif

我特别感兴趣的是我应该使用哪些控件,以及如何将删除图标定位在右侧,并且工具图标始终显示在中间?

在此先感谢。

+0

我来是混合WPF Silverlight的问题往往是一个坏主意的结论。如果你使用的是WPF,DockPanel,这里显然有一个正确的答案。当使用Silverlight – AnthonyWJones 2010-02-21 19:25:21

回答

5

我对这种情况下的优选面板是DockPanel中,而不是一个网格:

<DockPanel> 
    <Button>Add</Button> 
    <Label>This is a label</Label> 
    <Button DockPanel.Dock="Right">Del</Button> 
    <Button HorizontalAlignment="Center">Setting</Button> 
</DockPanel> 
+1

DockPanel在Silverlight中并不存在,尽管它在工具包中可用。如果您有其他原因需要包含工具包控件,我会同意DockPanel更好地描述这个意图。 – AnthonyWJones 2010-02-21 19:20:17

+1

你是对的Silverlight,但因为我不能没有DockPanel我从工具包中提取它。这样我就避免了完全加载工具包。 – Mart 2010-02-21 19:26:13

3

如何:

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

    <Image Source="Plusbutton" /> 
    <Label Text="This is a Label" Margin="3,0,3,0" Grid.Column="1" /> 
    <Image Source="Gear" HorizontalAlignment="Center" Grid.Column="2" /> 
    <Image Source="Minusbutton" Margin ="3,0,3,0" Grid.Column="3" /> 
</Grid> 
+1

时,答案并不是那么清楚,但为了清晰起见,我建议添加Grid.Column =“0”。 – Josh 2010-02-21 19:13:59

+2

为什么总是使用网格进行布局?与DockPanel相比,它没有任何好处。 – Mart 2010-02-21 19:18:32

+1

无论如何,在Silverlight中,Grid并不需要一个丑陋的XAML名称空间前缀,如:等。当它最终成为主要控制组希望这个丑陋会消失。 – Josh 2010-02-21 19:37:56

3

Grid,给这个: -

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <StackPanel HorizontalAlignment="Left" Grid.Column="0"> 
    <!-- Your content here --> 
    </StackPanel> 
    <StackPanel HorizontalAlignment="Center" Grid.Column="1"> 
    <!-- Your content here --> 
    </StackPanel> 
    <StackPanel HorizontalAlignment="Right" Grid.Column="2"> 
    <!-- Your content here --> 
    </StackPanel> 
</Grid> 

这种方法从内容本身解耦左,中,右内容的基本格式。在你的例子中,左边的StackPanel将有两个项目。每个面板的内容只需要关心其相对于面板中其他兄弟项目的布局。

+1

好,但我会建议添加Grid.Column =“0”为清晰。 – Josh 2010-02-21 19:14:23

+0

@Josh:加入以减轻你的美感。 ;) – AnthonyWJones 2010-02-21 19:16:46

+0

大声笑我知道当谈到XAML时,我感到非常痛苦。 – Josh 2010-02-21 19:36:08