2012-03-28 34 views
7

是否有可能有一個<StackPanel>或標籤(或按鈕,無論)橫跨其父控制(例如Window),並填寫所有允許的空間?水平堆疊面板填充家長控制

例如,如果我有3個控制

_窗口width_ _

[1] _ _ [2] _ _ [3]

或2控制

_窗口width_ _

[1] _ __ _ __ _ [2]

在每種情況下窗口的全部寬度被利用,每個邊緣控制分別被左對齊和右對齊。

+1

也許你可以使用一個'Grid'呢?有了「網格」,這是可能的。 – Vlad 2012-03-28 16:46:04

+0

那麼你是一個可以均勻地將它的孩子水平放置的控件?那是對的嗎? – 2012-03-28 18:03:35

+0

謝謝我會考慮這一點。 – Ternary 2012-03-28 18:20:21

回答

15

StackPanel將堆棧控件,所以不是簡短的答案。這不是StackPanel設計的目的。

您可以像Vlad建議的那樣使用網格。事情是這樣的:

<Grid HorizontalAlignment="Stretch"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="auto"/> 
     </Grid.ColumnDefinitions> 
     <Button Width="20" Height="20" Grid.Column="0"/> 
     <Button Width="20" Height="20" Grid.Column="2"/> 
     <Button Width="20" Height="20" Grid.Column="4"/> 
    </Grid> 
+0

那麼我是否需要動態管理爲每個新條目添加一列,並將每個控件放入它自己的單元格中? – Ternary 2012-03-28 18:20:15

+0

在顯示項目的動態集合的情況下,您可能需要考慮使用ListBox控件並將它的ItemPanel設置爲UniformGrid。這可能會接近你想要的,但我不認爲你會在第一個和最後一個項目上得到左右的理由。 – 2012-03-28 18:37:35

-3
 StackPanel m_pstackpanel = (StackPanel)this.Parent; 
     m_pstackpanel.Children.Clear(); 
     keypadclasslist keypadWindow = new keypadclasslist(m_pLstReceiver); 
     m_pstackpanel.Children.Add(keypadWindow);