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,因为否则会显示:

)

我希望所有三列的大小都相同,由这些标准决定:

编辑 2: 我忘记指定我希望第 2 列中的文本框大小相同,填充可用 space.

您必须在父元素中启用 SharedSize 功能。

<ListView Grid.IsSharedSizeScope="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            ...
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>