2010-07-09 20 views
7

Domyślnie tekst jest wyśrodkowany w nagłówkach w komórkach treści!), Starałem się, aby był wyrównany do lewej, oto co ja " ve wymyślić:WPF: Ustawianie wyrównania tekstu GridViewColumn

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

to wydaje się być idealnym miejscem, aby zmienić wygląd nagłówka, ponieważ mogę zmienić inne właściwości jak Margin, itd., to jednak nie reaguje na posesji HorizontalAlignment! Domyślam się, że pole tekstowe jest zwymiarowane do zawartości i samo w sobie, co sprawia, że ​​właściwość wyrównania jest zbędna.

Jak ustawić wyrównanie tekstu?

Odpowiedz

19

Ustawić HeaderContainerStyle do stylu, który wyznacza HorizontalContentAlignment do lewej:

<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

tutaj jest załączony właściwość ustawiania treści wyrównanie nagłówka:

#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

To działało dobrze, dzięki. Jednak dodałem 'style.BasedOn = Application.Current.TryFindResource (typeof (GridViewColumnHeader)) jako styl;' w celu rozszerzenia istniejącego stylu bez zastępowania go. –

Powiązane problemy