使用C#&;XAML

使用C#&;XAML,c#,xaml,windows-phone-8.1,radio-button,C#,Xaml,Windows Phone 8.1,Radio Button,在Android/Java中有一个RadioGroup对象,它可以包含许多单选按钮RadioGroup还有一个OnChanged事件,我可以收听该事件,然后询问它现在选择了哪个RadioButton(然后获取所选的单选按钮Id) 在C#中是否有相应的方法来实现相同的目标?似乎我需要为每个RadioButton响应选中的事件(尽管它们可以转到同一个事件处理程序),但在事件处理程序中,我需要遍历每个RadioButton以查看是否选中了它?如果我有很多(例如20个)RadioButton,那么这就是

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


在C#中是否有相应的方法来实现相同的目标?似乎我需要为每个
RadioButton
响应
选中的
事件(尽管它们可以转到同一个事件处理程序),但在事件处理程序中,我需要遍历每个
RadioButton
以查看是否选中了它?如果我有很多(例如20个)
RadioButton
,那么这就是很多代码。有更简单的方法吗?

通常在windows事件处理程序中有一个发送方参数,可以将其转换为引发事件的相应控件类型。。。例如

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox chk = (CheckBox)sender;
}
现在,您可以明确地知道在checked事件发生时选中了哪个复选框


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

您可以分配一个属性来标识控件,例如
标记
属性或
名称
属性。然后尝试将事件处理程序中的
发送方
强制转换为
复选框
类型,并检索标识属性

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

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

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

首先,您提到
RadioGroup
RadioButton
,但稍后您会询问有关
复选框的问题。你能把你的问题更新到你对哪个控件感兴趣吗?@Lightball oopps是的,更正了。我的意思是RadioButton不是CheckBox基本上,一个组中只有1个可以检查的RadioButton(组由
GroupName
属性表示,或将所有
RadioButton
放在一个容器中,如
StackPanel
。由@keyboardP提供的答案可能是识别哪个选项被选中并相应采取行动的最简单方法。在这种情况下,使用
标记
属性是最简单的。选择作为r特别提到使用标签/名称来标识选中的单选按钮。