wpf开发combbox里添加多个checkbox,并显示多选项的功能

13 篇文章 1 订阅

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

        }

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值