1

我有一个非常简单的用户控件(visifire 图表 + 日期选择器和一些单选按钮来控制过滤等):

<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

4

3 回答 3

2

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

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

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

于 2009-12-08T01:31:48.413 回答
0

表单上只能勾选一个单选按钮的原因与GroupName的范围有关。

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

当为用户控件中的单选按钮指定相同的 GroupName 时,这意味着窗口中的所有单选按钮都具有相同的 GroupName 并包含在同一组中。一次只能选中整个窗口组中的一个按钮。

答案是去掉单选按钮的 GroupName 属性,让 GroupBox 的自然分组生效。

于 2009-12-08T02:35:26.143 回答
0

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

于 2021-06-21T05:15:44.417 回答