我創建了一個有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