【问题标题】:How to have a parent check box that controls child checkbox UWP c#如何拥有一个控制子复选框UWP c#的父复选框
【发布时间】: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;
    }
}

有没有办法更有效地/以有效的方式做到这一点。

【问题讨论】:

    标签: c# checkbox uwp


    【解决方案1】:

    最好不要订阅Checked和Unchecked事件,设置IsChecked属性时,总是触发这两个事件,不方便判断。在这种情况下,您只需为 CheckBox 订阅 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 2017-05-26
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多