2009-12-27 14 views
8

Ich versuche, ein TabControl zu Autoskal machen nach dem seinem äußeren Raum (es ist in einem Stackpanel):TabControl.VerticalAlignment = Stretch tut nichts

<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> 

Das Snippet oben erzeugt das folgende Fenster , während ich die rote Grenze erreichen den unteren Rand des Fensters will:

alt text

Antwort

19

das Problem ist Ihre StackPanel. StackPanels strecken ihre Kinder nicht.

Verwenden Sie stattdessen DockPanel: Das letzte Kind wird gestreckt, um den verbleibenden Platz zu füllen (siehe LastChildFill, der standardmäßig true ist).

<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> 

Explizit VerticalAlignment Einstellung ist nicht notwendig, da its default value bereits Stretch ist.

Zugehöriger Link: Panels Overview on MSDN

+0

Ich benutzte Ihren Code, nichts; Die vertikale Größe von TabControl wird nicht wie erwartet angedockt. Ich würde denken, dass das Problem mit dem TabControl und nicht mit dem StackPanel ist. – Shimmy

+0

Sehr merkwürdig ... es funktioniert ganz gut hier: Ich kopiere den obigen Code in ein XAML-Fenster -> der rote Rand erstreckt sich über das ganze Fenster. Könntest du es nochmal versuchen? – Heinzi

+3

Nun, Ihre Lösung funktioniert. Leider, basierend auf den Umständen meiner Fenster, dass es verschiedene Elternteile gibt, hat es nicht geklappt. Die Lösung für mein spezielles Problem war das Einbetten in ein Raster, das die Höhe der Zeile auf * festlegte. Vielen Dank für Ihre Hilfe. – Shimmy

4

Sie die Höhe zu übergeordneten Fenstern tatsächliche Höhe binden können.

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