WPF遍历CheckBox控件实现全选及反选

本文介绍了一种在WPF应用程序中,通过遍历控件集合实现CheckBox全选与反选的方法,有效解决了大量CheckBox控件操作的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目开发中,遇到一大片的CheckBox控件,需要实现全选、反选,一个个写是不太实际的,这时候,我们就可以选择用遍历控件的方式来解决。

全选:遍历的控件是CheckBox,就给它赋值IsChecked= true

反选:遍历的控件是CheckBox,就让它的IsChecked值取反

Xaml的代码就不放出来了,就是一个Grid,Name="content"里面全是CheckBox,后面再加上两个按钮,一个全选,一个反选。

CS:这两个功能基本是一样的,所以我把它们合并成一个方法TraverseControl,再添加一个bool类型的参数isAll来区分

        /// <summary>
        /// 全选按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CheckAll_Click(object sender, RoutedEventArgs e)
        {
            TraverseControl(this.content.Children, true);
        }

        /// <summary>
        /// 反向选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void InvertSelection_Click(object sender, RoutedEventArgs e)
        {
            TraverseControl(this.content.Children, false);
        }

由于我在Grid上定义了行和列,content的子元素还不是CheckBox,所以我就多加了一个判断,如果是Grid,再遍历它的子元素

        /// <summary>
        /// 遍历CheckBox控件
        /// </summary>
        /// <param name="uiControls">子元素集合</param>
        /// <param name="isAll">是否全选</param>
        private void TraverseControl(UIElementCollection uiControls,bool isAll)
        {
            foreach (UIElement element in uiControls)
            {
                //获取元素名称
                switch (element.GetType().Name)
                {
//如果是Grid,遍历它的子元素
                    case "Grid":
                        TraverseControl((element as Grid).Children, isAll);
                        break;
                    case "CheckBox":
                        //全选
                        if (isAll)
                        {
                            (element as CheckBox).IsChecked = true;
                            break;
                        }
                        //反选
                        (element as CheckBox).IsChecked = !(element as CheckBox).IsChecked;
                        break;
                }
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值