Горизонтальное выравнивание содержимого метки WPF с шириной гибкости

У меня есть TabControl с некоторыми TabItems.

Заголовок TabItems состоит из UserControl с label и button. Для этого я следовал этому учебник.

Горизонтальное выравнивание label не работает, потому что для ширины установлено значение auto. Это приводит к тому, что текст центрируется, а buttons не полностью справа, где они должны быть.

Но мне нужно, чтобы ширина была гибкой, чтобы длинный текст не обрезался.

Это с шириной, установленной на авто, и с фиксированной шириной.

введите здесь описание изображения введите здесь описание изображения

Я хочу, чтобы это выглядело как изображение с фиксированной шириной, но с гибкой шириной в зависимости от длины меток.

Редактировать: я не использую тему, как в предложении, поднятом в комментариях.

Это мой код XAML:

<UserControl
    x:Class="CSM.UserControls.CloseableHeaderUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" d:DesignWidth="81" Margin="0" Height="20.5" >
    <Grid Margin="0,4,0,0">
        <Button Content="X" Name="bClose" FontFamily="Courier" FontWeight="Bold" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" FontStretch="Normal" FontSize="14"  ToolTip="Close" Height="20" Width="20" HorizontalAlignment="Right" Margin="0,-4,0,0"/>
        <Label Content="TabItem" Name="lTabTitle" FontFamily="Courier" FontSize="12" HorizontalAlignment="Left" HorizontalContentAlignment="Left" Width="auto" Height="24" VerticalAlignment="Top" Margin="0,-4"  />
    </Grid>
</UserControl>

person SideSky    schedule 29.03.2021    source источник
comment
Отвечает ли это на ваш вопрос? Выравнивание содержимого TabItem WPF всегда центрировано   -  person ASh    schedule 29.03.2021
comment
@ Эш, к сожалению, это не помогает   -  person SideSky    schedule 29.03.2021


Ответы (1)


Используйте DockPanel с LastChildFill:

<DockPanel LastChildFill="True">
  <Button DockPanel.Dock="Right" ... />
  <Label DockPanel.Dock="Left" ... />      
</DockPanel>
person Frank    schedule 29.03.2021
comment
Это работает не совсем правильно. Текст выравнивается по правому краю, несмотря на то, что горизонтальное выравнивание установлено по левому краю: ссылка - person SideSky; 30.03.2021
comment
Вам необходимо установить выравнивание: ‹Label HorizontalAlignment=Left VerticalAlignment=Center Margin=4,0 ... /› - person Frank; 30.03.2021
comment
когда я добавляю это, от внешнего вида тоже ничего не меняется. За исключением случаев, когда я устанавливаю ширину с автоматического на фиксированный размер - person SideSky; 31.03.2021
comment
Вам не нужно устанавливать ширину для метки. Пусть DockPanel управляет этим. - person Frank; 31.03.2021