wpf開發combbox裏添加多個checkbox,並顯示多選項的功能

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

        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章