2010-07-09 5 views
7

डिफ़ॉल्ट रूप से, पाठ एक ListView के शीर्ष लेख में केंद्रित है के पाठ संरेखण स्थापना, मैं यह गठबंधन छोड़ संघर्ष कर रहा है, यहाँ मैं क्या 'है ve के साथ आते हैं:WPF: (! <strong>नहीं</strong> सामग्री कोशिकाओं में) एक GridViewColumn

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

यह हेडर के स्वरूप में परिवर्तन के लिए सही जगह होने के लिए के बाद से मैं Margin की तरह अन्य संपत्तियों को बदल सकते हैं, आदि, फिर भी यह HorizontalAlignment संपत्ति का जवाब नहीं है प्रतीत होता है! मुझे लगता है कि टेक्स्टबॉक्स का आकार सामग्री और स्वयं केंद्रित है, इस प्रकार संरेखण संपत्ति को अनावश्यक बनाते हैं।

मैं टेक्स्ट को कैसे गठबंधन कर सकता हूं?

उत्तर

19

सेट एक शैली है कि HorizontalContentAlignment सेट छोड़ दिया करने के लिए करने के लिए HeaderContainerStyle:

<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

यहाँ शीर्ष लेख की सामग्री के संरेखण की स्थापना के लिए एक संलग्न संपत्ति है:

#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

यह अच्छी तरह से काम किया, धन्यवाद। हालांकि मैंने स्टाइल के रूप में 'style.BasedOn = Application.Current.TryFindResource (typeof (GridViewColumnHeader)) जोड़ा;' इसे बदलने के बिना मेरी मौजूदा शैली को बढ़ाने के लिए। –

संबंधित मुद्दे