C# WPF 列在 ListView 内的对齐方式
Posted
技术标签:
【中文标题】C# WPF 列在 ListView 内的对齐方式【英文标题】:C# WPF columns' alignment inside a ListView 【发布时间】:2021-05-05 10:44:40 【问题描述】:在我的应用程序中,我有一个ListView
,我在其中定义了它的ItemTemplate
,如下所示:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch" Background="Aqua">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="ParameterIconSize" />
<ColumnDefinition Width="Auto" SharedSizeGroup="ParameterDescriptionSize" />
<ColumnDefinition Width="Auto" SharedSizeGroup="ParameterValueSize" />
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
MaxHeight="50"
Margin="5"
Grid.IsSharedSizeScope="True"
Source="Binding Path=Icon" />
<TextBlock
Grid.Column="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Grid.IsSharedSizeScope="True"
Text="Binding Path=Parameter.NameKey" />
<TextBox
Grid.Column="2"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
VerticalContentAlignment="Center"
Grid.IsSharedSizeScope="True"
Text="Binding Path=Parameter.Value" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这样的代码会产生这样的输出:
如您所见,几乎每一列都有不同的宽度,而我想让它们均匀。我认为使用SharedSizeGroup
是正确的方法,但显然我缺少一些东西......
(PS:我必须在 Image 元素中设置 maxHeight ,否则会显示:
)
我希望所有三列的大小都相同,由以下标准确定:
第 0 列:最大的图像 第 1 列:最大的文本框文本 第 2 列:填充剩余空间(因为这也是用户输入字段,我无法先验地知道该输入是否类似于 0 或 1438233482379472)编辑 2: 我忘了指定我希望第 2 列中的文本框大小相同,以填充可用空间。
【问题讨论】:
如果你想要列,使用<ListView.View><GridView><GridViewColumn ...
- 比如this
谢谢,但这仍然不是我需要的。我不想硬编码列宽,如果我将其设置为 Auto,则中间描述(“Parameter_abcd”)将被裁剪,并且文本框仍然具有不同的尺寸。
【参考方案1】:
您必须在父元素中启用SharedSize
功能。
<ListView Grid.IsSharedSizeScope="True">
<ListView.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
【讨论】:
以上是关于C# WPF 列在 ListView 内的对齐方式的主要内容,如果未能解决你的问题,请参考以下文章