1

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

现在,当值更改时,我有一个带有回调的依赖属性。当我在这个回调过程中读取任何按钮的 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??
    }
}
4

2 回答 2

4

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

于 2011-10-09T15:25:46.470 回答
0

哼,逻辑没问题!

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

于 2010-01-15T17:04:49.187 回答