【发布时间】:2020-04-29 13:49:50
【问题描述】:
我的 uwp 程序中有这个:
我想要这样:
- 如果选中父复选框,则所有子复选框也都选中。
- 如果父复选框未选中,则所有子复选框也未选中。
- 如果选中所有子复选框,则父复选框也会选中。
- 如果未选中任何子复选框,则不会选中父复选框。
我当前的代码可以处理前三个,但是当我取消选中其中一个子级时,父级的未选中操作被激活,这将取消选中所有子级。
复选框被限制为 bool 同名项目。
检查代码:
private void IsChecked(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
if (checkBox.Name == "chkWeekday")
{
Monday = true;
Tuesday = true;
Wednesday = true;
Thursday = true;
Friday = true;
}
else
{
switch (checkBox.Name) // Handles data not updating yet
{
case "chkMonday":
Monday = true;
break;
case "chkTuesday":
Tuesday = true;
break;
case "chkWednesday":
Wednesday = true;
break;
case "chkThursday":
Thursday = true;
break;
case "chkFriday":
Friday = true;
break;
}
if (Monday && Tuesday && Wednesday && Thursday && Friday)
{
Weekday = true;
}
break;
}
}
取消检查代码:
private void IsUnchecked(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
if (checkBox.Name == "chkWeekday")
{
Monday = false;
Tuesday = false;
Wednesday = false;
Thursday = false;
Friday = false;
}
else
{
Weekday = false; //<============================================ This is why it un-checks all
switch (checkBox.Name) // Handles data not updating yet
{
case "chkMonday":
Monday = false;
break;
case "chkTuesday":
Tuesday = false;
break;
case "chkWednesday":
Wednesday = false;
break;
case "chkThursday":
Thursday = false;
break;
case "chkFriday":
Friday = false;
break;
}
break;
}
}
有没有办法更有效地/以有效的方式做到这一点。
【问题讨论】: