2013-02-15 73 views
0

我创建了一个有8个chechboxes动态添加的复选框列表。我的程序的想法是: 当一个框被选中时,一个图表出现在我的绘图仪上,当我取消选中它时,它会消失。如何在C#WPF应用程序中使用动态CheckBox进行管理?

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

谢谢。

+1

小心发布您的代码? – Pete 2013-02-15 16:36:21

+1

[WPF中的事件处理程序](http://msdn.microsoft.com/en-us/library/bb531289(v = vs.90).aspx)。我爱我一些谷歌。你也应该爱你一些Google! – Brian 2013-02-15 16:38:12

+0

它不会帮助...我没有代码的问题。 – 2013-02-15 16:44:18

回答

0

的答案在这里建议使用,请将.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; 
     } 
    } 
} 
+1

对不起,但这也是一个非常糟糕的解决方案,它使用更糟糕的winform方式的WPF。我的意思是,标签属性?请... – 2013-02-15 17:17:19

+0

是否使用了Tag属性?我的意思是OP已经通过动态创建复选框来滥用WPF,而不是在XAML中定义它们,可能是模板化的,通过属性转换器绑定IsChecked to Visibility。他问我一个问题,我回答,并不意味着我同意他的设计。 – 2013-02-15 17:37:56

+0

没错。假设的“动态”用户界面是开始的问题。 – 2013-02-15 17:39:41

1

您可以为它们全部使用一个事件。在活动的内部,您将获得控制的名称,该控件引发了该事件。类似这样的:

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    CheckBox senderChk = sender as CheckBox; 
    switch (senderChk.Name) 
    { 
     case "checkBox1": //do something 
     case "checkBox2": //do something 
    } 
} 
0

事件处理程序的“sender”参数指示哪个控件引发了一个事件。

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

然后,在你的事件处理程序,请执行下列操作:

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

它的工作原理!谢谢! – 2013-02-15 16:49:01

+0

对不起,但这是一个非常糟糕的解决方案,它以winforms的方式使用WPF。 – 2013-02-15 16:55:51

+0

@HighCore,可能是一个公平的评论,但请解释*为什么这是一种可怕的方式? – 2013-02-15 17:07:52

相关问题