wpf用户控制RadioButton预选

时间:2009-12-08 01:17:40

标签: c# wpf radio-button ischecked

我有一个非常简单的用户控件(visifire charts + datepickers和一些radiobuttons来控制过滤等):

<GroupBox Header="Scale" Width="159" HorizontalAlignment="Left" Margin="10,47,0,0"
          Height="38" VerticalAlignment="Top" Name="scalingBox">
    <Canvas Height="16">
        <RadioButton Name="scaleDays" Content="Days" GroupName="g2" Width="47"
                     IsChecked="True" Checked="scale_Change"/>
        <RadioButton Name="scaleHours" Content="Hours" GroupName="g2" Canvas.Left="60"
                     Width="59" Checked="scale_Change"/>
    </Canvas>
</GroupBox>

首先,在显示控件时,在第一个按钮上将IsChecked设置为true不会执行任何操作。

搜索变通方法我公开了一些公共方法来检查父窗口中我想要的按钮,但是当我有多个MyControl调用时,这些方法只检查方法最后一个实例上的按钮调用。像这样:

myControl1.SetDefaultScale();
myControl2.SetDefaultScale();

仅检查myControl2上的按钮,在myControl1上取消选中该组中的所有按钮。

可能导致此问题的任何想法?


是的,这是在所有控件之间共享的组名...谢谢Aran

3 个答案:

答案 0 :(得分:2)

我得到了你的代码,把它放在一个新项目和主窗口上。然后检查了第一个按钮。

RadioButtons有一些错误,如果点击它们,首先会丢失绑定,请参阅here。我已经描述了表单在表单之间共享的行为,some other people也是如此。我如何解决这些问题是分别绑定每个单选按钮并自己处理选择逻辑。 (如果选择了一个,则将“组”中其他人绑定的属性设置为false)

我希望它在下一个版本中得到修复。但与此同时,我单独绑定每个单选按钮,不要使用组名。

答案 1 :(得分:0)

为什么表单上只能检查一个单选按钮的原因与GroupName的范围有关。

当我尝试使用单选按钮且没有指定GroupName的两个用户控件实例时,单选按钮效果的范围仅限于用户控件内的组框。

如果为用户控件中的单选按钮指定了相同的GroupName,则表示窗口中的所有单选按钮具有相同的GroupName并包含在同一组中。一次只能检查整个窗口中组中的一个按钮。

答案是从单选按钮中删除GroupName属性,让GroupBox的自然分组生效。

答案 2 :(得分:0)

我在使用同一个用户控件的多个选项卡上遇到了类似的问题。删除了 GroupName,它按预期工作。 Doug 指出它们在所有创建的对象之间共享(范围广泛)。通过手动设置选中的值来完成这项工作。