在UI中选择了WPF RadioButton,但是代码看作IsChecked == false

时间:2010-01-15 15:35:14

标签: wpf radio-button dependencies unchecked

我在组合框中有一些单选按钮。我随机选择按钮,从视觉角度看,所有按钮都完美无缺,每次选择新按钮时都会调用事件处理程序。

现在,当值发生变化时,我有一个带有回调的依赖项属性。在这个回调过程中,我读取任何按钮的IsChecked值,该值为False,尽管按钮是在视觉上被选中的(它们同时都是假的,很奇怪)。调试器还会显示未选中的所有按钮。

胡虎,在基本验证后,我对原因缺乏了解......

<GroupBox>
    <StackPanel>
        <RadioButton x:Name="btNone"
            Content="Disconnected"
            IsChecked="True"
            Checked="OnSelChecked"/>
        <RadioButton x:Name="btManual"
            Content="Manual"
            Checked="OnSelChecked"/>
    </StackPanel>
</GroupBox>

事件处理程序:

private void OnSelChecked(object sender, RoutedEventArgs e) {
    if (btManual.IsChecked == true) {
        // is called
    }
}

依赖属性:

public static readonly DependencyProperty ManualProperty =
            DependencyProperty.Register("Manual",
            typeof(Position), typeof(SwitchBox),
            new FrameworkPropertyMetadata(null,
                FrameworkPropertyMetadataOptions.AffectsRender,
                new PropertyChangedCallback(OnManualChanged)));

依赖属性回调:

private static void OnManualChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) {
    SwitchBox box = sender as SwitchBox;
    if (box.btManual.IsChecked == true) {
        // never true, why??
    }
}

2 个答案:

答案 0 :(得分:4)

单选按钮组存在Microsoft错误。 如果您有多个相同用户控件的实例,其中每个用户控件包含一组单选按钮,则在一个实例中更改选择时,它将从所有其他实例中删除选择。

答案 1 :(得分:0)

哼,逻辑完好无损!

我使用了两个不同的SwitchBox实例,一个是XAML正常创建的,并显示了按钮的实际状态。然而,它是由依赖项属性回调访问的代码(并保持不变)创建的第二个。因此未选中的单选按钮。