我创建了一个有8个chechboxes动态添加的复选框列表。我的程序的想法是: 当一个框被选中时,一个图表出现在我的绘图仪上,当我取消选中它时,它会消失。如何在C#WPF应用程序中使用动态CheckBox进行管理?
我的问题是,我不知道如何管理事件来做到这一点,因为我动态地添加了复选框,并且我需要8个不同的事件来处理8个不同的图表。
谢谢。
我创建了一个有8个chechboxes动态添加的复选框列表。我的程序的想法是: 当一个框被选中时,一个图表出现在我的绘图仪上,当我取消选中它时,它会消失。如何在C#WPF应用程序中使用动态CheckBox进行管理?
我的问题是,我不知道如何管理事件来做到这一点,因为我动态地添加了复选框,并且我需要8个不同的事件来处理8个不同的图表。
谢谢。
的答案在这里建议使用,请将.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;
}
}
}
对不起,但这也是一个非常糟糕的解决方案,它使用更糟糕的winform方式的WPF。我的意思是,标签属性?请... – 2013-02-15 17:17:19
是否使用了Tag属性?我的意思是OP已经通过动态创建复选框来滥用WPF,而不是在XAML中定义它们,可能是模板化的,通过属性转换器绑定IsChecked to Visibility。他问我一个问题,我回答,并不意味着我同意他的设计。 – 2013-02-15 17:37:56
没错。假设的“动态”用户界面是开始的问题。 – 2013-02-15 17:39:41
您可以为它们全部使用一个事件。在活动的内部,您将获得控制的名称,该控件引发了该事件。类似这样的:
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...
}
它的工作原理!谢谢! – 2013-02-15 16:49:01
对不起,但这是一个非常糟糕的解决方案,它以winforms的方式使用WPF。 – 2013-02-15 16:55:51
@HighCore,可能是一个公平的评论,但请解释*为什么这是一种可怕的方式? – 2013-02-15 17:07:52
小心发布您的代码? – Pete 2013-02-15 16:36:21
[WPF中的事件处理程序](http://msdn.microsoft.com/en-us/library/bb531289(v = vs.90).aspx)。我爱我一些谷歌。你也应该爱你一些Google! – Brian 2013-02-15 16:38:12
它不会帮助...我没有代码的问题。 – 2013-02-15 16:44:18