在显示文件列表的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中的示例进行了操作,那么这里可能出现什么问题?
答案 0 :(得分:0)
这里有几个复杂因素
如果你运行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"