2013-02-15 77 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

相關問題