2010-07-09 43 views
7

Theo mặc định, văn bản được căn giữa trong tiêu đề của ListView (không trong ô nội dung!), Tôi đã cố gắng để căn chỉnh trái, đây là những gì tôi ' đã đưa ra:WPF: Đặt căn chỉnh văn bản của GridViewColumn

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

Đây dường như là nơi thích hợp để thay đổi sự xuất hiện của tiêu đề, kể từ khi tôi có thể thay đổi các thuộc tính khác như Margin vv, nhưng nó không đáp ứng với các HorizontalAlignment bất động sản! Tôi đoán các hộp văn bản có kích thước nội dung và chính nó làm trung tâm, do đó làm cho các tài sản liên kết dự phòng.

Làm cách nào để văn bản được căn trái?

Trả lời

19

Đặt HeaderContainerStyle đến một phong cách mà bộ HorizontalContentAlignment sang trái:

<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

Dưới đây là một tài sản gắn liền lập sự liên kết nội dung của tiêu đề:

#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

này làm việc tốt, cảm ơn. Tuy nhiên tôi đã thêm 'style.BasedOn = Application.Current.TryFindResource (typeof (GridViewColumnHeader)) làm Style;' để tăng thêm kiểu hiện có của tôi mà không thay thế nó. –

Các vấn đề liên quan