2009-12-27 5 views
8

Je suis en train de faire un TabControl à redimensionnement automatique selon le son espace (il est dans un StackPanel):TabControl.VerticalAlignment = extensible ne fait rien

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="100"> 
    <Grid> 
     <StackPanel> 
      <TabControl 
       BorderBrush="Red" 
       BorderThickness="2" 
       VerticalAlignment="Stretch" 
       VerticalContentAlignment="Stretch"> 

       <TabItem Header="Tab1"/> 
       <TabItem Header="Tab2"/> 
      </TabControl> 
     </StackPanel> 
    </Grid> 
</Window> 

L'extrait ci-dessus produit la fenêtre suivante , alors que je veux la frontière rouge pour atteindre le bas de la fenêtre:

alt text

Répondre

19

le problème est votre StackPanel. StackPanels ne va pas étirer leurs enfants.

Au lieu de cela, utilisez un DockPanel: Le dernier enfant sera étirée pour remplir l'espace restant (voir LastChildFill, qui par défaut true).

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="100"> 
    <Grid> 
     <DockPanel> 
      <TabControl BorderBrush="Red" BorderThickness="2"> 
       <TabItem Header="Tab1"/> 
       <TabItem Header="Tab2"/> 
      </TabControl> 
     </DockPanel> 
    </Grid> 
</Window> 

réglage Explicitement VerticalAlignment n'est pas nécessaire, puisque its default value est déjà Stretch.

Lien connexe: Panels Overview on MSDN

+0

J'ai utilisé votre code, rien; la taille verticale de TabControl n'est pas ancrée comme prévu; Je pense que le problème est avec le TabControl plutôt que le StackPanel. – Shimmy

+0

Très étrange ... ça marche parfaitement bien ici: je copie et colle le code ci-dessus dans une fenêtre XAML -> la bordure rouge s'étend sur toute la fenêtre. Pourriez-vous réessayer? – Heinzi

+3

Eh bien, votre solution fonctionne. Malheureusement, basé sur les circonstances de mes fenêtres, il y a plusieurs parents, cela n'a pas fonctionné. La solution à mon problème particulier consistait à l'incorporer dans une grille définissant la hauteur de la ligne à *. Merci pour votre aide. – Shimmy

4

Vous pouvez lier la hauteur à la hauteur réelle de la fenêtre parent.

<TabControl 
    BorderBrush="Red" 
    BorderThickness="2" 
    Height="{Binding Path=ActualHeight, 
     RelativeSource={RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Window}}}"> 
    <TabItem Header="Tab1"/> 
    <TabItem Header="Tab2"/> 
</TabControl> 
Questions connexes