在项目开发中,遇到一大片的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...