C# 如何拥有控制子复选框UWP c的父复选框
我的uwp计划中有: 我希望这样: 如果选中了“父项”复选框,则所有子项也将被选中。 如果取消选中“父项”复选框,则所有子项也将被选中。 如果选中所有子项复选框,则父项也将选中。 如果未选中任何子项复选框,则不会选中父项。 我的当前代码可以处理前三个,但是,当我取消检查其中一个子项时,父项的未检查操作将被激活,这将取消检查所有子项 复选框绑定到同名的布尔项 检查代码:C# 如何拥有控制子复选框UWP c的父复选框,c#,checkbox,uwp,C#,Checkbox,Uwp,我的uwp计划中有: 我希望这样: 如果选中了“父项”复选框,则所有子项也将被选中。 如果取消选中“父项”复选框,则所有子项也将被选中。 如果选中所有子项复选框,则父项也将选中。 如果未选中任何子项复选框,则不会选中父项。 我的当前代码可以处理前三个,但是,当我取消检查其中一个子项时,父项的未检查操作将被激活,这将取消检查所有子项 复选框绑定到同名的布尔项 检查代码: private void IsChecked(object sender, RoutedEventArgs e) { C
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;
}
}
是否有一种方法可以更有效地/以一种有效的方式执行此操作。最好不要订阅已检查和未检查的事件,当您设置IsChecked属性时,它总是会触发这两个事件,这将不便于判断。在这个场景中,您可以为您的复选框订阅Click事件。例如:
private void MyCheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
if (checkBox.Name == "chkWeekday" && checkBox.IsChecked == true)// First demand
{
chkTuesday.IsChecked = chkWednesday.IsChecked = chkThursday.IsChecked = true;
}
else if (checkBox.Name == "chkWeekday" && checkBox.IsChecked == false) // Second demand
{
chkTuesday.IsChecked = chkWednesday.IsChecked = chkThursday.IsChecked = false;
}
else if (chkTuesday.IsChecked == true && chkWednesday.IsChecked == true && chkThursday.IsChecked == true) //Third demand
{
chkWeekday.IsChecked = true;
}
else //Fourth demand
{
chkWeekday.IsChecked = false;
}
}