有了WPF,你必须有不同的想法。我创建了以下Window.xaml,希望能够说明我的意思。我有网格内的网格(gridception?)来正确对齐事物。我使用StackPanels进行一些控制。调整大小时不需要进行计算。我添加了一些颜色来显示不同网格的位置。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ThrowAwayWpfApplication.Window2"
Title="Window2" Height="480" Width="640">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Vertical">
<Label>Development Type</Label>
<ComboBox Margin="5,2,5,2"></ComboBox>
<Label>Development Type</Label>
<ComboBox Margin="5,2,5,2"></ComboBox>
<Label>Development Type</Label>
<ComboBox Margin="5,2,5,2"></ComboBox>
<Label>Development Type</Label>
<ComboBox Margin="5,2,5,2"></ComboBox>
<Label>Development Type</Label>
<ComboBox Margin="5,2,5,2"></ComboBox>
</StackPanel>
<Border Grid.Column="1" Margin="5" BorderThickness="2" BorderBrush="Red" Background="Aqua">
<Canvas Grid.Column="1" Margin="10" />
</Border>
</Grid>
<Grid Grid.Row="1" Background="AliceBlue">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Vertical" Margin="5">
<Label>Permanent Number</Label>
<TextBox Margin="5,2,5,2" />
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="5">
<Label>Quotation Number</Label>
<TextBox Margin="5,2,5,2" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Vertical" Margin="5">
<Label>Invoice Number</Label>
<TextBox Margin="5,2,5,2" />
</StackPanel>
</Grid>
</Grid>
</Window>
当设置高度/列/行的宽度,也可以用百分比来做出一个行始终占20%,对电网的高度:
<Grid.RowDefinitions>
<RowDefinition Height=2*></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
</Grid.RowDefinitions>
如果您正确使用布局系统,您会发现许多事情实际上更容易。在这种情况下,您正在寻找'HorizontalAlignment'。然后把你的三个控件放在一个三列的网格中,使间距均匀。 –
如果你正在计算你的控件的位置,你很可能做错了。在WPF中,你不应该设置任何对象的X,Y属性来定位它们。使用各种布局控件(网格,堆叠面板等)以及边距,填充和对齐属性(以及其他)来创建布局。你必须与WinForms不同地思考。 –
@NicoSchertler默认情况下,horizontalAlignment全部设置为“左”。我已经在组框中添加了一个拉伸的网格。 – Student