2017-08-10 49 views
1

我有一個WPF項目具有以下XAML代碼:代表WPF事件

<GroupBox Name="GroupBox1"> 
    <GroupBox.Header> 
     <WrapPanel> 
      <CheckBox Name="CheckBox1"/> 
      <Label Name="label1" Content="Extend" MouseLeftButtonUp="Label_Click" /> 
     </WrapPanel> 
    </GroupBox.Header> 
</GroupBox> 

我有這個GroupBoxes的不止一個。我想通過點擊label1來更改Checkbox1.IsChecked屬性。

目前,我有我的後臺代碼:

private void Label_Click(object sender, MouseButtonEventArgs e) 
{ 
    CheckBox1.IsChecked = !CheckBox1.IsChecked; 
} 

我想避免編寫每個GroupBox的行動。

問題:如何從的sender動態獲取checkBox1

+2

你可以分享你的所有組框一個單一的事件處理程序,使用'((標籤)發送方).Parent',然後檢索父面板從父母的子女獲得相關的複選框 –

回答

2

這個處理程序添加到您的標籤:

private void Label_Click(object sender, MouseButtonEventArgs e) 
{ 
    Label lb = (Label) sender; 
    WrapPanel wp = (WrapPanel) lb.Parent; 
    CheckBox cb= wp.Children.OfType<CheckBox>().FirstOrDefault(); 
    if (cb!= null) 
    {    
     cb.IsChecked = !cb.IsChecked; 
    } 
} 

關於編輯的代碼在VC 74評論。 @vc 74:THX

+0

只是做了;)Thx爲您的反饋:) – Ben

+0

正是我需要的!謝謝! – Syrlia

1

試試這個:

private void Label_Click(object sender, MouseButtonEventArgs e) 
{ 
    var checkbox = ((sender as Label).Parent as WrapPanel).Children.OfType<CheckBox>().FirstOrDefault(); 
    checkbox.IsChecked = !checkbox.IsChecked; 
}