WPF: настройка выравнивания текста для GridViewColumn - PullRequest
7 голосов
/ 09 июля 2010

По умолчанию текст центрируется в заголовках ListView (, а не в ячейках содержимого!), Я изо всех сил пытался выровнять его по левому краю, вот что я нашелс:

<ListView.Resources>
    <DataTemplate x:Key="Templ">
       <TextBlock HorizontalAlignment="Left" Text="{Binding}"/>
    </DataTemplate>
</ListView.Resources>   
...
<GridViewColumn HeaderTemplate="{StaticResource Templ}">File</GridViewColumn>

Кажется, это правильное место для изменения внешнего вида заголовка, поскольку я могу изменить другие свойства, такие как Margin и т. д., но он не отвечает на HorizontalAlignment имущество!Я предполагаю, что текстовое поле имеет размер содержимого и самоцентрируется, что делает избыточным свойство выравнивания.

Как сделать текст выровненным по левому краю?

Ответы [ 3 ]

21 голосов
/ 09 июля 2010

Установите для HeaderContainerStyle стиль, который устанавливает HorizontalContentAlignment влево:

<ListView.Resources>
    <DataTemplate x:Key="Templ">
        <TextBlock HorizontalAlignment="Left" Text="{Binding}"/>
    </DataTemplate>
    <Style x:Key="HeaderStyle" TargetType="GridViewColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
    </Style>
</ListView.Resources>
<ListView.View>
    <GridView>
        <GridView.Columns>
            <GridViewColumn HeaderTemplate="{StaticResource Templ}" HeaderContainerStyle="{StaticResource HeaderStyle}">File</GridViewColumn>
        </GridView.Columns>
    </GridView>
</ListView.View>
4 голосов
/ 23 февраля 2012

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

    #region HeaderContentAlignment

    /// <summary>Gets a <see cref="GridViewColumn"/>'s header content alignment.</summary>
    [Category("Common")]
    [AttachedPropertyBrowsableForType(typeof(GridViewColumn))]
    public static HorizontalAlignment GetHeaderContentAlignment(GridViewColumn gridViewColumn)
    {
        return (HorizontalAlignment)gridViewColumn.GetValue(HeaderContentAlignmentProperty);
    }
    /// <summary>Sets a <see cref="GridViewColumn"/>'s header content alignment.</summary>
    public static void SetHeaderContentAlignment(GridViewColumn gridViewColumn, HorizontalAlignment value)
    {
        gridViewColumn.SetValue(HeaderContentAlignmentProperty, value);
    }

    /// <summary>Indicates a <see cref="GridViewColumn"/>'s <see cref="GridViewColumn.HeaderContainerStyle"/>.</summary>
    public static readonly DependencyProperty HeaderContentAlignmentProperty = 
        DependencyProperty.RegisterAttached(
            "HeaderContentAlignment",
            typeof(HorizontalAlignment), // type
            typeof(GridViewExtensions), // containing static class
            new PropertyMetadata(HorizontalAlignment.Center, OnHeaderContentAlignmentChanged)
            );

    private static void OnHeaderContentAlignmentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        OnHeaderContentAlignmentChanged((GridViewColumn)d, (HorizontalAlignment)e.NewValue);
    }

    private static void OnHeaderContentAlignmentChanged(GridViewColumn gridViewColumn, HorizontalAlignment alignment)
    {
        Style style;
        if (ColumnHeaderAlignments.TryGetValue(alignment, out style) == false)
        {// style NOT created -> create, cache
            style = new Style(typeof(GridViewColumnHeader));
            style.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, alignment));
            ColumnHeaderAlignments.Add(alignment, style);
        }
        gridViewColumn.HeaderContainerStyle = style;
    }

    /// <summary>cache [HorizontalAlignment]: [Style]</summary>
    static readonly Dictionary<HorizontalAlignment, Style> ColumnHeaderAlignments = new Dictionary<HorizontalAlignment, Style>(4);

    #endregion HeaderContentAlignment
0 голосов
/ 30 июня 2018

Это может помочь кому-то еще, так как я тоже изо всех сил, лучший способ - это определить стиль для GridViewColumn.

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

<GridView>
  <GridView.ColumnHeaderContainerStyle>
      <Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="HorizontalContentAlignment" Value="Left" />
      </Style>
   </GridView.ColumnHeaderContainerStyle>
</GridView>

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

<GridViewColumn Header="Something">
   <GridViewColumn.HeaderContainerStyle>
    <Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="HorizontalContentAlignment" Value="Left" />
    </Style>
   </GridViewColumn.HeaderContainerStyle>
</GridViewColumn>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...