下拉框控件ComboBox與數據模板
- 一、ComboBox
- 1. ComboBox概述
- 2. ItemsControl類
- 3. Selector類
- 4. ComboBox類
- 二、ComboBox數據模板
- 總結
一、ComboBox
1. ComboBox概述
ComboBox類代表一個有下拉列表的選擇控件,供用戶選擇。
官方文檔:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.combobox?view=netframework-4.8
2. ItemsControl類
ItemsControl類是列表、下拉框、菜單、表格等一系列選項的基類,部分屬性如下:
屬性 | 說 明 |
---|---|
ltemsSource | 獲取或設置用于生成 ltemsControl 的內容的集合。設置 |
ltemsSource | 屬性后,集合ltems是只讀且固定大小的,因此不可修改。 |
ltems | 獲取用于生成 ltemsControl 的內容的集合, |
DisplayMemberPath | 獲取或設置源對象上的值的路徑,以用作對象的可視表示形式,不能同時設置 DisplayMemberPath 和ltemTemplate. |
ItemTemplate | 獲取或設置用來顯示每個項的數據模板DataTemplate。 |
ltemContainerStyle | 獲取或設置應用于為每個項生成的容器元素的 Style。 |
3. Selector類
Selector類允許用戶從其元素中選擇項的控件。部分屬性和事件如下:
屬性 | 說 明 |
---|---|
SelectedIndex | 獲取或設置當前選擇中第一項的索引,如果選擇為空返回-1。 |
Selectedltem | 獲取或設置當前選擇中的第一項,如果選擇為空返回 null。 |
SelectedValue | 獲取或設置當前選擇中的第一項的某個成員值。 |
SelectedValuePath | 通常與 SelectedValue 屬性一起使用,用于指定控件中選定項目的屬性。 |
事件 | 說 明 |
Selected | 當選擇項時發生。 |
SelectionChanged | 當選擇更改時發生。 |
UnSelected | 當取消選擇項時發生。 |
4. ComboBox類
ComboBox類的部分屬性與事件如下:
屬性 | 說 明 |
---|---|
SelecedtIndex | 獲取默認顯示項,索引從0起始 |
IsEditable | 獲取或設置一個值,該值指示啟用或禁用 ComboBox 的文本框中的文本編輯。 |
IsReadOnly | 獲取或設置啟用僅限選擇模式的值,在此模式中,可選擇但不可編輯組合框中的內容。 |
IsDropDownOpen | 獲取或設置一個值,該值指示組合框的下拉部分當前是否打開。 |
MaxDropDownHeight | 獲取或設置組合框下拉部分的最大高度。 |
Text | 獲取或設置當前選定項的文本。 |
事件 | 說 明 |
DropDownOpened | 當關閉組合框的下拉列表時發生 |
DropDownClosed | 當打開組合框的下拉列表時發生 |
MainWindow.xaml界面的屬性面板部分屬性設置如圖:
ComboBox控件內填寫下拉框內容有三種實現方式,第一種通過ComboBox.ItemsSource,第二種通過ComboBoxItem,第三種通過MainWindow.xaml.cs界面的C#代碼,第三種方式與第一種設置效果等同。
<Grid><!--ComboBox.ItemsSource實現--><ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="285,89,0,0" VerticalAlignment="Top" Width="216" Height="27" FontSize="20"><ComboBox.ItemsSource><Collections:ArrayList><system:String>高等數學</system:String><system:String>線性代數</system:String><system:String>數率統計</system:String><Rectangle Fill="red" Width="30" Height="20"/></Collections:ArrayList></ComboBox.ItemsSource></ComboBox><!--ComboBoxItem實現--><ComboBox x:Name="comboBox2" HorizontalAlignment="Left" Margin="285,160,0,0" VerticalAlignment="Top" Width="216" Height="27" FontSize="20"><ComboBoxItem>美術</ComboBoxItem><ComboBoxItem>音樂</ComboBoxItem><ComboBoxItem>體育</ComboBoxItem></ComboBox><!--C#代碼實現--><ComboBox x:Name="comboBox3" HorizontalAlignment="Left" Margin="285,229,0,0" VerticalAlignment="Top" Width="216" Height="27" FontSize="20"/></Grid>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<string> list = new List<string>();list.Add("C++");list.Add("Java");list.Add("Python");//數據源賦值comboBox3.ItemsSource = list;}
}
ComboBox控件最常用事件為SelectionChanged
//創建學生類,包含ID, Name, Score三個屬性
public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();comboBox3.SelectionChanged += comboBox3_SelectionChanged;List<Stu> list = new List<Stu>{new Stu(1, "張三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};comboBox3.ItemsSource = list;// 顯示的字段,下拉框界面上顯示的是姓名comboBox3.DisplayMemberPath = "Name";//選擇的值的字段,SelectedValue獲取的值是分數comboBox3.SelectedValuePath = "Score";}private void comboBox3_SelectionChanged(object sender, SelectionChangedEventArgs e){// 不設置 SelectedValuePath屬性的時候,Selectedltem與 SelectedValue 一樣//設置了 SelectedValuePath屬性,那么 SelectedValue 就會按Path指定的屬性顯示Console.WriteLine(comboBox3.SelectedItem + "->" + comboBox3.SelectedValue);}
}
二、ComboBox數據模板
通過在MainWindow.xaml界面的window.resources 定義數據模板,然后使用ComboBox類繼承的ItemTemplate屬性引用,示例代碼如下:
public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "張三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};comboBox.ItemsSource = list;comboBox.SelectionChanged += comboBox_SelectionChanged;}private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e){Console.WriteLine(comboBox.SelectedItem + "->" + comboBox.SelectedValue);}
}
<Window.Resources><DataTemplate x:Key="myDT"><StackPanel><TextBlock Text="{Binding Path=Id}" Foreground="Red" /><TextBlock Text="{Binding Path=Name}" Foreground="Green" /><TextBlock Text="{Binding Path=Score}" Foreground="Blue" /></StackPanel></DataTemplate></Window.Resources><Grid><ComboBox x:Name="comboBox" ItemTemplate="{StaticResource myDT}"HorizontalAlignment="Center" Height="55"Margin="0,120,0,0"VerticalAlignment="Top"Width="260"/></Grid>
總結
- ComboBox控件內容的三種實現方式
- 數據模板定義方法