c# WPF listview的一列里面放着combobox 我在后台给combobox加了几个item,现在不显示。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# WPF listview的一列里面放着combobox 我在后台给combobox加了几个item,现在不显示。相关的知识,希望对你有一定的参考价值。

但是把combobox拿到listview外面,item能正常显示。也就是说item加进去了,只不过在listview里没取到啊。这是什么问题,该怎么解决

combobox是否定义在template里面的,其数据源不能顺着界面绑定,需要单独定义。 参考技术A comboboxitem直接在前台写,或者用绑定。

C# WPF 列在 ListView 内的对齐方式

【中文标题】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 列中的文本框大小相同,以填充可用空间。

【问题讨论】:

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

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

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

【讨论】:

以上是关于c# WPF listview的一列里面放着combobox 我在后台给combobox加了几个item,现在不显示。的主要内容,如果未能解决你的问题,请参考以下文章

c# WPF listview里有一列的内容是combobox,combobox的初始状态是不可用,通过一个编辑点击使combo变可用

C#如何向listview中的一列添加LIST集合中的OBJECT数据

c#中 如何用listview显示图片

C# listview 最大列数

如何从C#中获取ListView中选中某一行某一列的值

C#如何让listview可编辑 winform