使用 C# 和 XAML 检测选中了多个单选按钮

Detecting which radio button of many was checked using C# & XAML

在Android/Java中有一个RadioGroup对象可以包含很多RadioButtonsRadioGroup 也有一个 OnChanged 事件,我可以收听它,然后询问它现在选择了哪个 RadioButton(然后获取所选的单选按钮 ID)。

在C#中是否有相应的方法来实现同样的事情?看来我需要为每个 RadioButton 响应 Checked 事件(尽管它们可以转到同一个事件处理程序),但是在事件处理程序中我需要遍历每个 RadioButton看看它是否被检查过?如果我有很多(例如 20)RadioButton,这就是很多代码。有没有更简单的方法?

通常在 windows 事件处理程序中有一个 sender 参数,可以将其转换为引发事件的适当控件类型...例如

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox chk = (CheckBox)sender;
}

现在您清楚地知道在选中事件发生时选中了哪个复选框。

因此在您的情况下,您会将同一个事件处理程序挂接到所有复选框,然后使用 chk 变量标识新选中的复选框。

您可以分配一个 属性 来标识控件,例如 Tag 属性 或 Name 属性。然后您尝试将事件处理程序中的 sender 转换为 CheckBox 类型并检索标识 属性。

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox cb = sender as CheckBox;

    if(cb != null)
    {
        string cbName = cb.Name; 
    }
}

通过使用 as 而不是显式转换 ((CheckBox)sender),您可以避免在转换无效时抛出异常。在这种情况下,如果仅将 CheckBox 分配给此事件处理程序,则这种情况不太可能发生,但在其他情况下这是一种很好的做法,除非您出于任何原因需要抛出异常。