2011-08-18 51 views
1

我有一個下拉列表和單選按鈕。如果用戶從下拉菜單中選擇了某項內容,我希望清除單選按鈕。如果選擇了單選按鈕,我想要清除選擇下拉菜單。不幸的是,這會產生相互抵消的事件。我嘗試使用如下所示的發件人來確定值是由代碼還是由用戶更改,但這不起作用。如何讓這些事件僅在用戶是行動的來源時才起作用?確定事件源

private void rbBlank_Checked(object sender, RoutedEventArgs e) 
{ 
    // Verify source of event 
    if (sender is RadioButton) 
    { 
     // Display 
     comboBoxTitles.SelectedIndex = -1; 
    } 
} 


private void comboBoxTitles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
{ 
    // Verify source of event 
    if (sender is ComboBox) 
    { 
     // Display 
     rbBlank.IsChecked = false; 
    } 
} 
+1

我認爲你需要'e.Source'而不是發件人。 –

+0

你爲什麼不使用DP?創建屬性,只有該屬性的分配將改變一個控件或其他的狀態。 – Tigran

回答

1

由於源代碼在兩種情況下都是相同的實例,因此您將無法區分兩者。

這並不直接回答這個問題,但如果你在SelectionChanged事件處理程序比較comboBoxTitles的SelectedIndex,你的問題應該得到解決

private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (comboBoxTitles.SelectedIndex != -1) 
    { 
     rbBlank.IsChecked = false; 
    } 
} 
1

試着比較一下控件的sender ==實例是不是類型的。

private void rbBlank_Checked(object sender, RoutedEventArgs e) 
{ 
    // Verify source of event 
    if (sender == rbBlank) 
    { 
     // Display 
     comboBoxTitles.SelectedIndex = -1; 
    } 
} 


private void comboBoxTitles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
{ 
    // Verify source of event 
    if (sender == comboBoxTitles) 
    { 
     // Display 
     rbBlank.IsChecked = false; 
    } 
} 
1

如果你知道這些控件的ID,你可以嘗試這樣的事:

System.Web.UI.WebControls.WebControl webControl = (System.Web.UI.WebControls.WebControl) sender; 

if(webControl.ID == <comboboxId>) 
{ 
//Do something 
} 

我還沒有嘗試這樣做,但我想它可能會奏效。

+1

你注意到了WPF標籤嗎? –