2016-11-04 166 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

相關問題