2012-03-28 7 views
7

Ist es möglich, eine <StackPanel> oder Beschriftungen (oder Schaltflächen, was auch immer) horizontal über die übergeordnete Kontrolle (z. B. Window) zu gehen und füllen Sie den gesamten Platz erlaubt?Horizontale Stackpanel Fill Elternsteuerung

Zum Beispiel, wenn I 3 Kontrollen hatten

_ Fenster width_ _

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

oder 2 steuert

_ Fenster width_ _

[1] _ __ _ __ _ [2]

In jedem Fall wird die volle Breite des Fensters verwendet, wobei jede Kantensteuerung links bzw. rechts ausgerichtet ist.

+1

Vielleicht können Sie eine 'Grid' stattdessen verwenden? Mit einem 'Grid' wäre das möglich. – Vlad

+0

Sie also ein Steuerelement, das gleichmäßig seine Kinder horizontal absperrt? Ist das korrekt? –

+0

Danke, ich werde mich darum kümmern. – Ternary

Antwort

15

Ein StackPanel wird Steuerelemente stapeln, also ist keine kurze Antwort. Dafür ist ein StackPanel nicht vorgesehen.

Sie könnten ein Raster verwenden, wie Vlad vorgeschlagen hat. Etwas wie folgt aus:

<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

Muss ich also dynamisch eine Spalte für jeden neuen Eintrag hinzufügen und jedes Steuerelement in eine eigene Zelle platzieren? – Ternary

+0

Wenn Sie eine dynamische Objektgruppe anzeigen möchten, sollten Sie darüber nachdenken, das ListBox-Steuerelement zu verwenden und ItemPanel auf ein UniformGrid zu setzen. Das kommt vielleicht nahe an das, was Sie wollen, aber ich glaube nicht, dass Sie beim ersten und letzten Punkt die linke und rechte Ausrichtung erhalten. –

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