2011-07-14 74 views
2

我需要把分組控制,並通過邊把他們一邊。我想出了這個代碼使用多個StackPanel來做到這一點。把堆棧面板並排

<Window x:Class="xamlTests.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="310" Width="525"> 
    <Grid> 

     <StackPanel x:Name="_ribbonRadioButtonPanel" Orientation="Vertical"> 
      <CheckBox Content="Signed" Height="16" Name="Signed" Checked="Signed_Checked" Margin="10,5"/> 
      <StackPanel x:Name="_wordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockWordLength" Text="Word Length" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_integerWordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxIntegerWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockIntegerWordLength" Text="Integer Word Length" Width="120"/> 
      </StackPanel> 
     </StackPanel> 

     <StackPanel x:Name="_ribbonRadioButtonPanel2"> 
      <StackPanel x:Name="_max" Orientation="Horizontal"> 
       <TextBox Height="18" Name="maxTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="maxTextBlock" Text="Max" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_min" Orientation="Horizontal"> 
       <TextBox Height="18" Name="minTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="minTextBlock" Text="Min" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_delta" Orientation="Horizontal"> 
       <TextBox Height="18" Name="deltaTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="delatTextBlock" Text="Delta" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
    </Grid> 
</Window> 

但是,我得到StackPanels超頻。 XAML有什麼問題?什麼佈局面板用於對齊多個組件?

enter image description here

+2

您正在使用網格來同時存放兩個堆疊面板....在網格中使用堆疊面板或..使用網格排列來對齊它們 – Bathineni

回答

7

你可以做以下...

 <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <StackPanel x:Name="_ribbonRadioButtonPanel" Orientation="Vertical" Grid.Column="0"> 
      <CheckBox Content="Signed" Height="16" Name="Signed" Checked="Signed_Checked" Margin="10,5"/> 
      <StackPanel x:Name="_wordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockWordLength" Text="Word Length" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_integerWordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxIntegerWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockIntegerWordLength" Text="Integer Word Length" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
     <StackPanel x:Name="_ribbonRadioButtonPanel2" Grid.Column="1"> 
      <StackPanel x:Name="_max" Orientation="Horizontal"> 
       <TextBox Height="18" Name="maxTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="maxTextBlock" Text="Max" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_min" Orientation="Horizontal"> 
       <TextBox Height="18" Name="minTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="minTextBlock" Text="Min" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_delta" Orientation="Horizontal"> 
       <TextBox Height="18" Name="deltaTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="delatTextBlock" Text="Delta" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
    </Grid> 

這將使控制到單獨的列,以便它們不重疊。另一種方法是把疊板成具有定向設定爲水平類似下面一個StackPanel ...

 <StackPanel Orientation="Horizontal"> 
     <StackPanel x:Name="_ribbonRadioButtonPanel" Orientation="Vertical" Grid.Column="0"> 
      <CheckBox Content="Signed" Height="16" Name="Signed" Checked="Signed_Checked" Margin="10,5"/> 
      <StackPanel x:Name="_wordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockWordLength" Text="Word Length" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_integerWordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxIntegerWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockIntegerWordLength" Text="Integer Word Length" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
     <StackPanel x:Name="_ribbonRadioButtonPanel2" Grid.Column="1"> 
      <StackPanel x:Name="_max" Orientation="Horizontal"> 
       <TextBox Height="18" Name="maxTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="maxTextBlock" Text="Max" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_min" Orientation="Horizontal"> 
       <TextBox Height="18" Name="minTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="minTextBlock" Text="Min" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_delta" Orientation="Horizontal"> 
       <TextBox Height="18" Name="deltaTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="delatTextBlock" Text="Delta" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
    </StackPanel> 

有可能這樣做,以及以獲得所需結果的許多其他方式。

3

試試這個..... 剛剛更換你的網格的StackPanel

<StackPanel x:Name="_ribbonRadioButtonPanel" Orientation="Vertical"> 
     <CheckBox Content="Signed" Height="16" Name="Signed" Checked="Signed_Checked" Margin="10,5"/> 
     <StackPanel x:Name="_wordLength" Orientation="Horizontal"> 
      <TextBox Height="18" Name="textBoxWordLength" Width="30" Margin="10,5"/> 
      <TextBlock Height="20" Name="textBlockWordLength" Text="Word Length" Width="120"/> 
     </StackPanel> 
     <StackPanel x:Name="_integerWordLength" Orientation="Horizontal"> 
      <TextBox Height="18" Name="textBoxIntegerWordLength" Width="30" Margin="10,5"/> 
      <TextBlock Height="20" Name="textBlockIntegerWordLength" Text="Integer Word Length" Width="120"/> 
     </StackPanel> 
    </StackPanel> 

    <StackPanel x:Name="_ribbonRadioButtonPanel2"> 
     <StackPanel x:Name="_max" Orientation="Horizontal"> 
      <TextBox Height="18" Name="maxTextBox" Width="100" Margin="10,5"/> 
      <TextBlock Height="20" Name="maxTextBlock" Text="Max" Width="120"/> 
     </StackPanel> 
     <StackPanel x:Name="_min" Orientation="Horizontal"> 
      <TextBox Height="18" Name="minTextBox" Width="100" Margin="10,5"/> 
      <TextBlock Height="20" Name="minTextBlock" Text="Min" Width="120"/> 
     </StackPanel> 
     <StackPanel x:Name="_delta" Orientation="Horizontal"> 
      <TextBox Height="18" Name="deltaTextBox" Width="100" Margin="10,5"/> 
      <TextBlock Height="20" Name="delatTextBlock" Text="Delta" Width="120"/> 
     </StackPanel> 
    </StackPanel> 
</StackPanel> 

或試試這個

<Grid> 
<Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition ></RowDefinition> 
     </Grid.RowDefinitions> 
     <StackPanel x:Name="_ribbonRadioButtonPanel" Orientation="Vertical"> 
      <CheckBox Content="Signed" Height="16" Name="Signed" Checked="Signed_Checked" Margin="10,5"/> 
      <StackPanel x:Name="_wordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockWordLength" Text="Word Length" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_integerWordLength" Orientation="Horizontal"> 
       <TextBox Height="18" Name="textBoxIntegerWordLength" Width="30" Margin="10,5"/> 
       <TextBlock Height="20" Name="textBlockIntegerWordLength" Text="Integer Word Length" Width="120"/> 
      </StackPanel> 
     </StackPanel> 

     <StackPanel x:Name="_ribbonRadioButtonPanel2" Grid.Row="1"> 
      <StackPanel x:Name="_max" Orientation="Horizontal"> 
       <TextBox Height="18" Name="maxTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="maxTextBlock" Text="Max" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_min" Orientation="Horizontal"> 
       <TextBox Height="18" Name="minTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="minTextBlock" Text="Min" Width="120"/> 
      </StackPanel> 
      <StackPanel x:Name="_delta" Orientation="Horizontal"> 
       <TextBox Height="18" Name="deltaTextBox" Width="100" Margin="10,5"/> 
       <TextBlock Height="20" Name="delatTextBlock" Text="Delta" Width="120"/> 
      </StackPanel> 
     </StackPanel> 
    </Grid> 
5

的問題是,網格是可容納許多元素的容器,並默認它們被放在網格= 0,列= 0。

由於還沒有定義的行或列,並且未指定其中應stackpanels使用Grid.Row和Grid.Column附加屬性被放置,它們出現在同一個地方。

,並在同一小區網格的多個元素疊加,你可以看到。

你可以找到其他答案的例子,我想解釋爲什麼這種情況正在發生。