首页 > 解决方案 > 以编程方式创建的 CheckBox 不会触发 Checked/Unchecked 事件

问题描述

我有一个简单的 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;
    }
}

但什么都没有被解雇。有人有想法吗?

标签: c#wpf

解决方案


尝试使用CheckedChanged代替Checkedand Unchecked

例如:

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;
    }
}

推荐阅读