WPF中combobox显示多列的下拉框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF中combobox显示多列的下拉框相关的知识,希望对你有一定的参考价值。

因为我要下拉框显示数据库里的多个字段【产品编码】【产品名称】【产品价格】【产品等级】

写combobox的comboboxitem的样式就可以了
<ComboBox>
<ComboBox.Resources>
<Style TargetType="x:Type ComboBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type ComboBoxItem">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Binding 产品编码"></TextBlock>
<TextBlock Text="Binding 产品名称"></TextBlock>
<TextBlock Text="Binding 产品价格"></TextBlock>
<TextBlock Text="Binding 产品等级"></TextBlock>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

</ComboBox.Resources>
</ComboBox>
后台绑定combobox的itemsource就可以。追问

那我只要Combobox显示产品编码,在加三个Textbox用来显示其他三个属性应该怎么做???

参考技术A 具体步骤如下:实例以datatable为数据源,数据源也可以是arraylist或通过add()方法添加
int columnPadding = 5;
private float[] columnWidths = new float[0]; //项宽度
private String[] columnNames = new String[0]; //项名称
private int valueMemberColumnIndex = 0; //valueMember属性列所在的索引

/// <summary>
/// 绑定数据源或更改数据源时发生
/// </summary>
/// <param name="e"></param>
protected override void OnDataSourceChanged(EventArgs e)

base.OnDataSourceChanged(e);

InitializeColumns();


/// <summary>
/// 设置ValueMember属性发生
/// </summary>
/// <param name="e"></param>
protected override void OnValueMemberChanged(EventArgs e)

base.OnValueMemberChanged(e);

InitializeValueMemberColumn();


/// <summary>
/// 显示下拉框的时候触发
/// </summary>
/// <param name="e"></param>
protected override void OnDropDown(EventArgs e)

base.OnDropDown(e);
this.DropDownWidth = (int)CalculateTotalWidth(); //计算combobox下拉框的总宽度


/// <summary>
/// 初始化数据源各列的名称
/// </summary>
private void InitializeColumns()

PropertyDescriptorCollection propertyDescriptorCollection = DataManager.GetItemProperties();

columnWidths = new float[propertyDescriptorCollection.Count];
columnNames = new String[propertyDescriptorCollection.Count];

for (int colIndex = 0; colIndex < propertyDescriptorCollection.Count; colIndex++)

String name = propertyDescriptorCollection[colIndex].Name;
columnNames[colIndex] = name;



/// <summary>
/// 返回ValueMember在显示列中的索引位置
/// </summary>
private void InitializeValueMemberColumn()

int colIndex = 0;
foreach (String columnName in columnNames)

if (String.Compare(columnName, ValueMember, true, CultureInfo.CurrentUICulture) == 0)

valueMemberColumnIndex = colIndex;
break;

colIndex++;



/// <summary>
/// 计算combobox下拉框的总宽度
/// </summary>
/// <returns></returns>
private float CalculateTotalWidth()


columnPadding = 5;
float totWidth = 0;
foreach (int width in columnWidths)

totWidth += (width + columnPadding);


//总宽度加上垂直滚动条的宽度
return totWidth + SystemInformation.VerticalScrollBarWidth;

WPF{ComboBox绑定类对象, 下拉列显示的值,与取到的值}


技术分享


DisplayMemberPath 是用来显示下拉列表的值

SelectedValuePath是用来取得选中项的值。

ComboBox绑定类对象, 下拉列显示的值,与取到的值



string. Join的作用


技术分享


输出结果是


技术分享










以上是关于WPF中combobox显示多列的下拉框的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF - 组合框

wpf combox 在哪里设置下拉框的宽度和高度

WPF 下拉框选项做鼠标 Hover 预览效果

在WPF使用中读取一个配置文件获得一个结构体list,然后将数据绑定到Combobox下拉列表框中,如何实现?

C#如何设置combobox下拉框的内容

C#怎么实现下拉框动态绑定数据