在C# WPF中实现多列下拉框可以通过自定义控件来实现。以下是一种实现方式:
下面是一个简单的示例代码:
using System.Windows;
using System.Windows.Controls;
namespace CustomControls
{
public class MultiColumnComboBox : ComboBox
{
static MultiColumnComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MultiColumnComboBox), new FrameworkPropertyMetadata(typeof(MultiColumnComboBox)));
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(object), typeof(MultiColumnComboBox), new PropertyMetadata(null));
public object ItemsSource
{
get { return GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty SelectedValueProperty =
DependencyProperty.Register("SelectedValue", typeof(object), typeof(MultiColumnComboBox), new PropertyMetadata(null));
public object SelectedValue
{
get { return GetValue(SelectedValueProperty); }
set { SetValue(SelectedValueProperty, value); }
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
// 获取下拉框的Popup控件
var popup = GetTemplateChild("PART_Popup") as Popup;
if (popup != null)
{
// 自定义布局
var grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition());
grid.ColumnDefinitions.Add(new ColumnDefinition());
// 第一列展示数据
var column1ComboBox = new ComboBox();
column1ComboBox.ItemsSource = ItemsSource;
column1ComboBox.DisplayMemberPath = "Column1";
column1ComboBox.SelectedValuePath = "Column1";
column1ComboBox.SelectionChanged += (sender, e) =>
{
SelectedValue = column1ComboBox.SelectedValue;
};
grid.Children.Add(column1ComboBox);
// 第二列展示数据
var column2ComboBox = new ComboBox();
column2ComboBox.ItemsSource = ItemsSource;
column2ComboBox.DisplayMemberPath = "Column2";
column2ComboBox.SelectedValuePath = "Column2";
column2ComboBox.SelectionChanged += (sender, e) =>
{
SelectedValue = column2ComboBox.SelectedValue;
};
Grid.SetColumn(column2ComboBox, 1);
grid.Children.Add(column2ComboBox);
// 设置Popup的内容为自定义布局
popup.Child = grid;
}
}
}
}
使用该自定义控件时,可以在XAML中引用并设置ItemsSource属性来绑定数据源。例如:
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:customControls="clr-namespace:CustomControls"
Title="MainWindow" Height="450" Width="800">
<Grid>
<customControls:MultiColumnComboBox ItemsSource="{Binding Data}" SelectedValue="{Binding SelectedValue}" />
</Grid>
</Window>
这样就可以在C# WPF中实现多列下拉框了。请注意,上述示例代码仅提供了一种实现方式,你可以根据自己的需求进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云