2014-01-29 161 views
2

一個stack panel能成長垂直和水平?使用堆疊面板 - 垂直+水平

對於例如,

如果有3 stack panel items,然後,

Item1

Item2

Item3

如果有5 stack panel items然後,

Item1Item4

Item2Item5

Item3

(最多一排,還有一個最大的n項即可。如果超過,一個新行開始)

一兩件事:我創建在run-timestack panel items(代碼隱藏)!

this.itemsPanel.Children.Add(item1); 
this.itemsPanel.Children.Add(item2); 
this.itemsPanel.Children.Add(item3); 
this.itemsPanel.Children.Add(item5); 
+1

請看到這一點:http://stackoverflow.com/questions/11344938/list-items-vertically-on-a-wrappanel-and-take-advantage-of-multiple-columns –

+1

要麼你想[WrapPanel](http://msdn.microsoft.com/en-us/library/system.windows.controls.wrappanel(v = vs.110)的.aspx)或[自定義面板](HTTP:// wpftutorial。淨/ CustomLayoutPanel.html)。 – Sheridan

回答

3

你想要一個WrapPanel一個ListBox,但你的概率要你的對象是相同的大小,寬度和高度,這將等於你最寬和最高的對象,這就是爲什麼我們使用IsSharedSizeScope網格與一個WrapPanel。

<ListBox Name="ButtonList" 
       HorizontalContentAlignment="Stretch" 
       BorderThickness="0" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       Padding="0" 
       Background="Transparent" 
       Margin="0" 
       Grid.IsSharedSizeScope="True" 
       > 


      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate > 
        <WrapPanel /> 
       </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <!-- you need the grid, otherwise buttons are different heights depending on the control --> 
         <Grid.RowDefinitions> 
          <RowDefinition SharedSizeGroup="row1"/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition SharedSizeGroup="col1"/> 
         </Grid.ColumnDefinitions> 
<!-- put some control here --> 

    </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox>