在项目开发中,遇到一大片的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;
<DataGrid ItemsSource="{Binding Items1}" CanUserAddRows="False"
  AutoGenerateColumns="False" HeadersVisibility="All">
        <DataGrid.Resources>
            <model:BindingProxy x:Key="DataContextProxy" Data="{Binding}" />
private void checkBoxAll_CheckStateChanged(object sender, EventArgs e)
    //判断checkbox是否被选中
    if (checkBoxAll.CheckState == CheckState.Checked)
        checkBoxQQ.Checked = true;
        checkBoxWechat.Checked = true;
        checkBoxDIng
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/wi
                                    DataGridTemplateColumn.CellTemplate 中加入设定Checkbox的IsChecked属性为。wpf点击全选的在datagrid里列加一个checkbox控件,绑定模板。然后修改对应的Item的IsChecked 属性就可以进行选择操作。
                                      WPF提供了许多封装项的集合的控件,本章介绍简单的ListBox和ComboBox控件,后续哈会介绍更特殊的控件,如ListView、TreeView和ToolBar控件。所有这些控件都继承自ItemsControl类(ItemsControl类本身又继承自Control类)。
  ItemsControl类添加了所有基于列表的控件都使用的基本功能。最显著的是,它提供了填充列表项的两...
                                    在我的问卷调查系统中,每个groupbox对应一个题目,由于每个问卷的题目数目不统一,所以要遍历所有的groupbox控件(我这里的groupbox是动态生成的),在提交问卷时,需要保证每个题目都已作答,故需对选项进行遍历实现方法如下:
           for(int i = 0; i < SinglegroupBoxes.Length; i++)
       <TextBlock>   
                <CheckBox Name="cbAllCreate" Click="CbAllCreate_Click">All</CheckBox> 
                <CheckBox Name="cbInverseCreate" Click=...
        /// 获得指定元素的所有子元素(这里需要有一个从DataTemplate里获取控件的函数)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param na...