C# WPF 列在 ListView 中的对齐方式
C# WPF columns' alignment inside a ListView
在我的应用程序中,我有一个 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 列:填写 remainig space(因为这也是一个用户输入字段,我无法先验地知道该输入是否类似于 0 或 1438233482379472)
编辑 2:
我忘记指定我希望第 2 列中的文本框大小相同,填充可用 space.
您必须在父元素中启用 SharedSize
功能。
<ListView Grid.IsSharedSizeScope="True">
<ListView.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的应用程序中,我有一个 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 列:填写 remainig space(因为这也是一个用户输入字段,我无法先验地知道该输入是否类似于 0 或 1438233482379472)
编辑 2: 我忘记指定我希望第 2 列中的文本框大小相同,填充可用 space.
您必须在父元素中启用 SharedSize
功能。
<ListView Grid.IsSharedSizeScope="True">
<ListView.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ListView.ItemTemplate>
</ListView>