首先说明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;
}
}
}