Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#WPF应用程序中使用动态复选框进行管理?_C#_Wpf_Events_Dynamic_Checkbox - Fatal编程技术网

如何在C#WPF应用程序中使用动态复选框进行管理?

如何在C#WPF应用程序中使用动态复选框进行管理?,c#,wpf,events,dynamic,checkbox,C#,Wpf,Events,Dynamic,Checkbox,我创建了一个复选框列表,动态添加了8个复选框。我的课程理念是: 选中某个框时,绘图仪上会显示一个图表,取消选中该框时,图表将消失 我的问题是,我不知道如何管理事件来做到这一点,因为我动态添加了复选框,并且我需要8个不同的事件来处理8个不同的图表 谢谢。您可以将一个事件用于所有事件。在事件内部,您将获得触发事件的控件的名称。大概是这样的: private void CheckBox_Click(object sender, RoutedEventArgs e) { CheckBox

我创建了一个复选框列表,动态添加了8个复选框。我的课程理念是: 选中某个框时,绘图仪上会显示一个图表,取消选中该框时,图表将消失

我的问题是,我不知道如何管理事件来做到这一点,因为我动态添加了复选框,并且我需要8个不同的事件来处理8个不同的图表


谢谢。

您可以将一个事件用于所有事件。在事件内部,您将获得触发事件的控件的名称。大概是这样的:

 private void CheckBox_Click(object sender, RoutedEventArgs e)
 {
     CheckBox senderChk = sender as CheckBox;
     switch (senderChk.Name)
     {
         case "checkBox1":  //do something 
         case "checkBox2":  //do something 
     }
 }
事件处理程序的“sender”参数指示引发事件的控件

在某个地方,您创建了一个控件。确保在某个地方保留对它的引用,无论是作为成员变量,还是在字典中或其他任何地方

然后,在事件处理程序中,执行以下操作:

If(sender==myControl)
{
   ...do something...
}
Elseif (sender==myOtherControl)
{
    ...do something else...
}

这里的答案是建议使用.Name属性,但对于动态创建的复选框,现在可能会很好地工作

CheckBox chx;
chx.Tag = "Chart 1"; // put these tags in an enum or at least constants
chx.Click += chx_Click; 

void chx_Click(object sender, RoutedEventArgs e)
{
    CheckBox chx = sender as CheckBox;
    if (chx != null && chx.Tag != null)
    {
        switch (chx.Tag)
        {
            case "Chart 1": 
                        myChart1.Visibility = chx.IsChecked? Visibility.Visible: Visibility.Collapsed;  
                break;
            case "Chart 2": //...
                break;
            default:
                break;
        }
    }
}

想把你的密码寄出去吗?。我爱我一些谷歌。你也应该爱你一些谷歌!这没用。。。我对代码没有问题。@user2076231如果你真的关心在WPF中以正确的方式做事情,请告诉我,我会给出一个正确的答案。很抱歉,这是一个非常糟糕的解决方案,它以winforms的方式使用WPF。@HighCore,可能是一个公平的评论,但请解释为什么这是一个糟糕的方式?@because。首先,他应该使用一个
ItemsControl
和一个适当的
DataTemplate
,然后他就可以针对
数据项而不是
UI
来编程他的应用程序逻辑。很抱歉,这也是一个非常糟糕的解决方案,它以一种更糟糕的winforms方式使用WPF。我是说,标签属性?请问…使用Tag属性就是你所反对的吗?我的意思是OP已经滥用了WPF,动态创建复选框而不是在XAML中定义它们,可能是模板化的,通过属性转换器将IsChecked绑定到可见性。他问了一个问题,我回答说,这并不意味着我同意他的设计。所谓的“动态”用户界面首先是个问题。