Wenn man ein TabControl in einem StackPanel plaziert, erbt das TabControl so auch die Höhe von dem Element StackPanel. Das kann negative Auswirkung haben:

Um das Problem zu beheben muss man das StackPanel dazu bewegen sich in Höhe anzupassen, ein einfaches Height auf ein StackPanel bringt leider nichts. Man muss das innere Element, also das TabControl dazu bewegen das StackPanel zu vergrössern. Also muss man am TabControl die Höhe setzen. Soweit klar. Ich kann hier einen festen Wert definieren. Nun aber möchte ich das Ganze ja auch skalierbar umsetzen.

Dazu kann ich mir das darüberliegende Element holen, welches eine Höhe definiert. In meinem Beispiel ist das, das Window. Ich binde also die Höhe meines TabControls mit FindAncestor an die Höhe des Window:

1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Class="FindAncestor.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
 
	<StackPanel>
		<TabControl Background="AliceBlue" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight}">
			<TabItem Header="Test" Background="AliceBlue" />
		</TabControl>
	</StackPanel>
 
</Window>

Voila und der gewünschte Effekt wird erreicht.



TabControl-Höhe 100%
Markiert in: