以编程方式创建的CheckBox不会触发Checked / Unchecked事件

时间:2018-10-22 09:01:10

标签: c# wpf

我有一个简单的WPF应用程序,它使用“框架”进行多页导航。其中一个页面创建一系列CheckBoxes,并为每个创建的复选框添加几个处理程序(Checked / Unchecked)。 CheckBoxes可以正常工作,并且可以通过编程方式访问,可以通过单击来选中或取消选中它们,但是如果单击,则不会触发这两个事件。

这里是CheckBoxes的创建:

ModuleStackpanels[i].Children.Add(ModuleCheckBoxes[i]);
StackPanel.SetZIndex(ModuleCheckBoxes[i], 2);
ModuleCheckBoxes[i].Checked += new RoutedEventHandler(ModuleCheckBoxClick);
ModuleCheckBoxes[i].Unchecked += new RoutedEventHandler(ModuleCheckBoxClick);

我从0到30的地方。然后有了处理程序:

private void ModuleCheckBoxClick(object sender, RoutedEventArgs e)
{
    int CheckBoxCounter = 0;

    for(int i=0;i<30;i++)
    {
        if (ModuleCheckBoxes[i].IsChecked == true) CheckBoxCounter++;
    }

    if(CheckBoxCounter > 1)
    {
        Button_QueryStatus.IsEnabled = false;
    }
}

但是什么也没开。 有人有主意吗?

2 个答案:

答案 0 :(得分:1)

尝试使用CheckedChanged代替CheckedUnchecked

例如:

public bool checkedthecheckbox { get; set; }

CheckBox testchbox = new CheckBox();

private void Form1_Load(object sender, EventArgs e)
{
    testchbox.CheckedChanged += new EventHandler(testchbox_CheckedChanged);
}

void testchbox_CheckedChanged(object sender, EventArgs e)
{
    if (testchbox.Checked)
        checkedthecheckbox = true;
    else
        checkedthecheckbox = false;
}

您的情况:

ModuleStackpanels[i].Children.Add(ModuleCheckBoxes[i]);
StackPanel.SetZIndex(ModuleCheckBoxes[i], 2);
ModuleCheckBoxes[i].CheckedChanged += new EventHandler(ModuleCheckBoxClick);

private void ModuleCheckBoxClick(object sender, RoutedEventArgs e)
{
    int CheckBoxCounter = 0;

    for(int i=0;i<30;i++)
    {
        if (ModuleCheckBoxes[i].IsChecked == true) CheckBoxCounter++;
    }

    if(CheckBoxCounter > 1)
    {
        Button_QueryStatus.IsEnabled = false;
    }
}

答案 1 :(得分:1)

好消息!由于按钮创建错误,并非所有复选框都具有事件处理程序。 30上的3有它,这些按钮代表另一种物品。