2016-11-04 163 views
0

我对WinForms更加熟悉,因为它不是那么惩罚。在WinForms中,您可以立即选择3个控件,然后单击格式>对齐>居中表单和bam!任务完成。VB.NET WPF如何将窗口/窗体中的多个控件居中?

但是在WPF中,我无法再在Format选项卡中找到它。所以想知道我是否在某处忽略了它?已经搜索了几个小时谷歌,并最终决定在这里问。

这是一张图片来进一步解释我的问题。 如果我选择Middles,控件将相互重叠。我怎样才能确保所有3将很好地集中在form/grid/groupbox中?

问题2 =另外我怎样才能确保文本框之间有相等的空间而不是每次计算位置? enter image description here

+0

如果您正确使用布局系统,您会发现许多事情实际上更容易。在这种情况下,您正在寻找'Horizo​​ntalAlignment'。然后把你的三个控件放在一个三列的网格中,使间距均匀。 –

+0

如果你正在计算你的控件的位置,你很可能做错了。在WPF中,你不应该设置任何对象的X,Y属性来定位它们。使用各种布局控件(网格,堆叠面板等)以及边距,填充和对齐属性(以及其他)来创建布局。你必须与WinForms不同地思考。 –

+0

@NicoSchertler默认情况下,horizo​​ntalAlignment全部设置为“左”。我已经在组框中添加了一个拉伸的网格。 – Student

回答

2

有了WPF,你必须有不同的想法。我创建了以下Window.xaml,希望能够说明我的意思。我有网格内的网格(gridception?)来正确对齐事物。我使用StackPanels进行一些控制。调整大小时不需要进行计算。我添加了一些颜色来显示不同网格的位置。

Sample Xaml with grids

<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> 
+0

啊我明白你的意思了。但是我想保持文本框的简短并且很好地将其集中在表单中。而不是增加宽度来掩盖表单的宽度,有没有一种简单的方法来实现呢? – Student

+1

您可以将第4列添加到该子网格中,并使用添加到答案中的百分比方法来调整宽度,以获得正确的比例。 –

+0

好的!谢谢一堆。要玩堆栈面板,然后因为我只使用Grid,因为它已经做了我想要的东西。 – Student

相关问题