2010-07-09 12 views
7

De manera predeterminada, el texto se centra en los encabezados de ListView (no en las celdas de contenido!), He estado luchando para que quede alineado a la izquierda, esto es lo que hice he llegado con:WPF: Establecer la alineación de texto de una GridViewColumn

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

Este parece ser el lugar adecuado para alterar la apariencia de la cabecera, ya que puedo cambiar otras propiedades como Margin, etc., sin embargo, no responde a la propiedad HorizontalAlignment! Supongo que el cuadro de texto tiene el tamaño del contenido y está centrado, lo que hace que la propiedad de alineación sea redundante.

¿Cómo puedo hacer que el texto quede alineado a la izquierda?

Respuesta

19

Ajuste el HeaderContainerStyle a un estilo que establece HorizontalContentAlignment a izquierda:

<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> 
3

Aquí es una propiedad adjunta para ajustar la alineación del contenido de la cabecera:

#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

Esto funcionó bien, gracias. Sin embargo, agregué 'style.BasedOn = Application.Current.TryFindResource (typeof (GridViewColumnHeader)) como Style;' para aumentar mi estilo existente sin reemplazarlo. –

Cuestiones relacionadas