Я бы обычно скрывал вкладку, когда остался только один элемент:
<TabControl ItemsSource="{Binding Data}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}"
Value="1">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Если вы хотите отобразить что-то вместо этого, вы можете сложить его выше и показывать только тогда, когда количество падает до 1.
Редактировать: Я, наверное, должен был упомянуть, что ваш вопрос на самом деле не имеет особого смысла, вы должны попытаться выразить себя более четко.Одно из предположений относительно того, что вы могли иметь в виду, заключается в том, что вы хотите, чтобы последняя оставшаяся вкладка растягивалась на всю доступную ширину.Это не так просто, поскольку заголовок находится в TabPanel, его просто нельзя растянуть.
Одним из приближений будет привязка к ширине TabControl:
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}"
Value="1">
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=ActualWidth}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.ItemContainerStyle>
Но это немногослишком большой, вы можете вычесть небольшое значение, используя ValueConverter .
Edit2: Как это:
<Style TargetType="{x:Type TabItem}">
<Style.Resources>
<local:AddConverter x:Key="AddConverter"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}"
Value="1">
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource AncestorType=TabControl},
Path=ActualWidth,
Converter={StaticResource AddConverter},
ConverterParameter=-5}"/>
</DataTrigger>
</Style.Triggers>
</Style>
public class AddConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double input = (double)value;
double input2 = double.Parse(parameter as string);
return input + input2;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double input = (double)value;
double input2 = double.Parse(parameter as string);
return input - input2;
}
}