首先說明winform和wpf在這裏的區別,winform裏肯定不存在combbox裏裝checkbox的功能了,然後關於combbox的賦值在wpf裏是不能直接給定值的,winfrom卻可以,顯得wpf高大上,wpf的值必須從他的成員裏獲取,所以要顯示多選項的內容,就必須有一個動態生成的子項目,他的內容就是當前的複選項目集合,talk is cheap,秀my codes,先上圖,三連拍
看代碼咯
先來視圖部分
<ComboBox Height="23" x:Name="cbx_Station" Width="300" IsReadOnly="False" >
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="DarkSlateGray" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="DarkSlateGray" />
</ComboBox.Resources>
<CheckBox x:Name="chk0" Content="全選" Click="chk0_Checked" Foreground="White" />
<!--<CheckBox x:Name="chk1" Content="OP010" Click="chk1_Checked" Foreground="White" />
<CheckBox x:Name="chk2" Content="OP020" Click="chk1_Checked" Foreground="White" />
<CheckBox x:Name="chk3" Content="OP040" Click="chk1_Checked" Foreground="White" />
<CheckBox x:Name="chk4" Content="OP080" Click="chk1_Checked" Foreground="White" />-->
</ComboBox>
接着是程序部分
/// <summary>
/// 用packId獲取到所有的站點名,填充進combbox
/// </summary>
/// <param name="packId"></param>
/// <param name="stationId"></param>
private void fillCbxbyPackSn(int packId, int stationId)
{
// 用packid獲取當前長線型號的id
Nebula.BLL.Packs pks = new Nebula.BLL.Packs();
string currentPaskSn = pks.GetModel(packId).SN;
int currentBatteryId = pks.GetModel(TasksPacksList[0].packId).batteryId;
//獲取所有工位名稱
Nebula.BLL.Battery bty = new Nebula.BLL.Battery();
string allStation = bty.GetModel(currentBatteryId).byWayStations;
string[] stationArray = allStation.Split(';');
//遍歷插入子成員checkbox
for (int i = 0; i < stationArray.Length ; i++)
{
cbx_Station.Items.Insert(cbx_Station.Items.Count, new CheckBox()
{
Content = stationArray[i],
Foreground = Brushes.White,
Name="chk"+i.ToString()
} ) ;
//continue;
//爲動態生成的控件添加事件
foreach (var c in cbx_Station.Items)
{
if (c is CheckBox)
{
CheckBox cbx = (CheckBox)c;
if (cbx.Content.ToString () == "全選") continue;
if (cbx.Name == "chk"+i.ToString ())
{
// 點擊checkbox時的事件處理
// cbx.Click += chkBox_Click;
cbx.Click += new RoutedEventHandler(chkBox_Click);
//cbx_Station.Items.Add(cbx);
}
}
}
}
}
/// <summary>
/// 除了全選以外其他的checkbox的單擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chkBox_Click(object sender, RoutedEventArgs e)
{
//return;
int i = 0;
foreach (var item in cbx_Station.Items)
{
if (item is CheckBox)
{
// CheckBox chks = item as CheckBox;
// chks.IsChecked = chk0.IsChecked;
i++;
}
}
displayCheckedItems(i);
}
/// <summary>
/// 全選checkbox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chk0_Checked(object sender, RoutedEventArgs e)
{
int i = 0;
foreach (var item in cbx_Station.Items)
{
if (item is CheckBox)
{
CheckBox chks = item as CheckBox;
chks.IsChecked = chk0.IsChecked;
i++;
}
}
displayCheckedItems(i);
}
/// <summary>
/// 選中的值就添加到下拉框的選擇狀態
/// </summary>
/// <param name="num">checkbox的數量</param>
private void displayCheckedItems(int num)
{
StringBuilder sb = new StringBuilder();
//修改下拉框的選擇項
foreach (var item in cbx_Station.Items)
{
if (item is CheckBox)
{
CheckBox chks = item as CheckBox;
if (chks.IsChecked == true)
{
sb.Append(chks.Content.ToString() + "-");
}
else
{
chk0.IsChecked = false;
}
}
}
if (cbx_Station.Items.Count > num)
{
cbx_Station.Items.RemoveAt(num);
}
//wpf下combbox不能直接賦值,只能獲取成員的值。
cbx_Station.Items.Insert(cbx_Station.Items.Count, new ComboBoxItem() { Content = sb.ToString() });//動態插入成員
cbx_Station.Text = sb.ToString();
//將ComboBoxItem隱藏
foreach (var item in cbx_Station.Items)
{
if (item is ComboBoxItem)
{
ComboBoxItem chks = item as ComboBoxItem;
chks.Visibility = Visibility.Hidden;
}
}
}