我在组合框中有一些单选按钮。我随机选择按钮,从视觉角度看,所有按钮都完美无缺,每次选择新按钮时都会调用事件处理程序。
现在,当值发生变化时,我有一个带有回调的依赖项属性。在这个回调过程中,我读取任何按钮的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??
}
}
答案 0 :(得分:4)
单选按钮组存在Microsoft错误。 如果您有多个相同用户控件的实例,其中每个用户控件包含一组单选按钮,则在一个实例中更改选择时,它将从所有其他实例中删除选择。
答案 1 :(得分:0)
哼,逻辑完好无损!
我使用了两个不同的SwitchBox实例,一个是XAML正常创建的,并显示了按钮的实际状态。然而,它是由依赖项属性回调访问的代码(并保持不变)创建的第二个。因此未选中的单选按钮。