【问题标题】:C# WPF columns' alignment inside a ListViewC# WPF 列在 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 列中的文本框大小相同,以填充可用空间。

【问题讨论】:

  • 如果你想要列,使用&lt;ListView.View&gt;&lt;GridView&gt;&lt;GridViewColumn ... - 比如this
  • 谢谢,但这仍然不是我需要的。我不想硬编码列宽,如果我将其设置为 Auto,则中间描述(“Parameter_abcd”)将被裁剪,并且文本框仍然具有不同的尺寸。

标签: c# wpf alignment


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2013-06-14
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多