[英]Why is my WPF ListView column not right aligning?
在显示文件列表的Explorer
视图中,我已尝试按如下方式右对齐“ Size
”列。 我有以下资源:
<UserControl.Resources>
<converters:FileSizeConverter x:Key="FileSizeConverter" />
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
<DataTemplate x:Key="SizeTemplate">
<TextBlock HorizontalAlignment="Right" Text="{Binding Size, Converter={StaticResource FileSizeConverter}}" />
</DataTemplate>
</UserControl.Resources>
FileSizeConverter
只是一个IValueConverter
,它将数字文件大小转换为具有 B、KB、MB 等的字符串格式。然后我有以下列:
<GridViewColumn CellTemplate="{StaticResource SizeTemplate}" Header="Size" Width="80" />
这显示正确转换的文件大小,例如8,2 KB
,但仍然左对齐。 我遵循了 Microsoft Docs 文章How to: Change the Horizontal Alignment of a Column in a ListView 中的示例,那么这里可能出了什么问题?
这里有几个并发症。
如果运行Snoop并查看视图中的最终结果,您将发现该文本块托管在gridviewrowpresenter中。
这是应用一堆代码来布置其内容。
如果您真的想确切地知道它是如何工作的,那么可以在这里查看源代码https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/GridViewRowPresenter.cs
如果您对如何使其按需工作更感兴趣,那么有两件事要做:
1)使列伸展:
<ListView.Resources>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.Resources>
2)将文本块放入可以填充该空间并允许文本块向右对齐的容器中。 或者,更简单地说。 在您的文本块上设置TextAlignment。
<DataTemplate x:Key="SizeTemplate">
<TextBlock TextAlignment="Right"
右对齐 ListView GridViewColumn 中的文本:
例如:
<ListView Name="_priceListListView" ItemsSource="{Binding PriceList}" >
<!-- How to set ListViewItem.HorizontalContentAlignment="Stretch" -->
<ListView.Resources>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<!-- Left-aligned text column -->
<GridViewColumn Header="Item" DisplayMemberBinding="{Binding Path=Item}" />
<!-- Right-aligned numeric column -->
<GridViewColumn Header="Price" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Price, StringFormat={}{0:C}}" HorizontalAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.