WPF:设置 GridViewColumn 的文本对齐方式
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3214270/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WPF: Setting the text alignment of a GridViewColumn
提问by Saulius Valatka
By default, text is centered in the headers of a ListView
(notin the content cells!), I've been struggling to make it left aligned, here's what I've come up with:
默认情况下,文本在 a 的标题中居中ListView
(而不是在内容单元格中!),我一直在努力使其左对齐,这是我想出的:
<ListView.Resources>
<DataTemplate x:Key="Templ">
<TextBlock HorizontalAlignment="Left" Text="{Binding}"/>
</DataTemplate>
</ListView.Resources>
...
<GridViewColumn HeaderTemplate="{StaticResource Templ}">File</GridViewColumn>
This does seem to be the right place to alter the appearance of the header, since I can change other properties like Margin
, etc., yet it does not respond to the HorizontalAlignment
property! I'm guessing the textbox is sized to content and itself centered, thus making the alignment property redundant.
这似乎是更改标题外观的正确位置,因为我可以更改其他属性,例如Margin
等,但它不响应该HorizontalAlignment
属性!我猜文本框的大小与内容一致,并且本身居中,从而使对齐属性变得多余。
How can I make the text left aligned ?
如何使文本左对齐?
回答by Quartermeister
Set the HeaderContainerStyleto a style that sets HorizontalContentAlignmentto left:
将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>
回答by Jake Berger
Here's an attached property for setting the header's content alignment:
这是用于设置标题内容对齐的附加属性:
#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
回答by Usman Ali
This may help someone else, as i was struggling too, the best way is to define style for GridViewColumn.
这可能对其他人有所帮助,因为我也在苦苦挣扎,最好的方法是为 GridViewColumn 定义样式。
You can set a style to apply to all column headers like below
您可以设置样式以应用于所有列标题,如下所示
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</GridView.ColumnHeaderContainerStyle>
</GridView>
and You can override the header style for a specific column like below:
并且您可以覆盖特定列的标题样式,如下所示:
<GridViewColumn Header="Something">
<GridViewColumn.HeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</GridViewColumn.HeaderContainerStyle>
</GridViewColumn>