Установите заголовки вкладок в другом месте

#wpf #xaml

Вопрос:

Как сделать TabControl таким образом

Управление вкладками

Я хочу сделать вкладку «Параметры», которая расположена в левом нижнем углу, но не знаю, как изменить положение заголовка для вкладки 2

 <Grid>
    <TabControl TabStripPlacement="Left">
        <TabControl.Resources>
            <Style TargetType="TabItem">
                <Setter Property="Height" Value="50" />
                <Setter Property="Width" Value="50" />
            </Style>
        </TabControl.Resources>
        <TabItem>
            <TabItem.Header>
                <TextBlock Text="Tab1" />
            </TabItem.Header>
            <TabItem.Content>
                <TextBlock Text="Tab1 content" />
            </TabItem.Content>
        </TabItem>
        <TabItem>
            <TabItem.Header>
                <TextBlock Text="Tab2" />
            </TabItem.Header>
            <TabItem.Content>
                <TextBlock Text="Tab2 content" />
            </TabItem.Content>
        </TabItem>
    </TabControl>
</Grid>
 

Комментарии:

1. можете ли вы опубликовать текущее состояние кода?

2. @пользователь1239299 Отредактировано

Ответ №1:

Самое простое решение-вставить невидимый манекен TabItem , высота которого соответствует зазору перед последним TabItem .

 <TabItem Visibility="Hidden"/>
 

Вы можете задать его высоту в конструкторе или во время выполнения следующим способом.

 void SetDummyTabItemHeight(TabItem dummyItem)
{
    var tabPanel = (TabPanel)VisualTreeHelper.GetParent(dummyItem);

    var otherItemsActualHeight = tabPanel.Children
        .Cast<TabItem>()
        .Where(x => x != dummyItem)
        .Sum(x => x.ActualHeight);

    dummyItem.Height = tabPanel.ActualHeight - otherItemsActualHeight;
}
 

Комментарии:

1. Я понимаю, что нет более элегантного способа?

2. Я не знаю другого простого решения, но вы можете изучить TabItem и TabPanel исходный код в справочном источнике.

3. Большое вам спасибо, я буду использовать этот метод