Можно ли выровнять заголовки по левому краю в TabControl WPF?

Прямо сейчас у меня есть окно WPF, в котором все метки вкладок TabControl расположены по центру.

Я бы хотел, чтобы уровни вкладок TabControl были выровнены по левому краю.

Возможно ли это без полной переделки ControlTemplate?

Я пробовал возиться с HorizontalAlignment, HorizontalContentAlignment и т. д., но ничего из того, что я пробовал, не дало желаемого эффекта.

Если я попробую это решение (предложенное T Levesque):

<TabControl...>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>
    </TabControl.ItemContainerStyle>
    ...
</TabControl>

... Я получаю это:

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

Это близко, но в конечном итоге выглядит как гистограмма.


person devuxer    schedule 22.09.2009    source источник


Ответы (4)


Следующее даст вам вид, который вам нужен.

    <TabControl TabStripPlacement="Left" HorizontalContentAlignment="Left" >
        <TabItem HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Header="Header 1">
            <TabItem.Content>Test</TabItem.Content>
        </TabItem>

        <TabItem HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Header="Header 2"  >
            <TabItem.Content>Test</TabItem.Content>
        </TabItem>

        <TabItem HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Header="Header Longer Version">
            <TabItem.Content>Test</TabItem.Content>
        </TabItem>
    </TabControl>
person Reed Copsey    schedule 22.09.2009
comment
Я только что проверил и придумал что-то с правильным внешним видом. - person Reed Copsey; 22.09.2009

Какой элемент управления вы используете для свойства TabItem.Header? Если вы просто используете метку, указываете ли вы ширину метки на какое-то общее значение? Если метка соответствует размеру содержимого, она будет отображаться так, как вы показали. Попробуйте следующее с общей шириной для меток, используемых для отображения текста заголовка:

<TabControl TabStripPlacement="Left" >
    <TabItem>
        <TabItem.Header>
            <Label Width="100">test tab 1</Label>
        </TabItem.Header>
        <TabItem.Content>
            xyz
        </TabItem.Content>
    </TabItem>
    <TabItem>
        <TabItem.Header>
            <Label Width="100">test t2</Label>
        </TabItem.Header>
        <TabItem.Content>
            abc
        </TabItem.Content>
    </TabItem>
    <TabItem>
        <TabItem.Header>
            <Label Width="100">test tab three</Label>
        </TabItem.Header>
        <TabItem.Content>
            abc
        </TabItem.Content>
    </TabItem>
</TabControl>
person Simon Fox    schedule 22.09.2009

Вы можете определить горизонтальное выравнивание для всех заголовков вкладок:

<TabControl...>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>
    </TabControl.ItemContainerStyle>
    ...
</TabControl>
person Thomas Levesque    schedule 22.09.2009
comment
Хорошая идея, но не совсем работает. Я отредактировал свой вопрос, чтобы показать, что это делает. - person devuxer; 22.09.2009
comment
Но +1 за идею установки ItemContainerStyle... экономит много разметки. Смотрите мою вторую правку. - person devuxer; 22.09.2009

Простое добавление атрибута HorizontalContentAlignment="Left" в TabControl приведет к выравниванию заголовков вкладок по левому краю.

<TabControl
Margin="0,5,0,0"
HorizontalContentAlignment="Left"
TabStripPlacement="Left">
<TabItem
    Header="Perform System Administration">
    ...
<TabItem
    Header="Perform Setup Tasks">
    ...
person SkyBlade    schedule 07.09.2011