我有一个非常简单的用户控件(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
答案 0 :(得分:2)
我得到了你的代码,把它放在一个新项目和主窗口上。然后检查了第一个按钮。
RadioButtons有一些错误,如果点击它们,首先会丢失绑定,请参阅here。我已经描述了表单在表单之间共享的行为,some other people也是如此。我如何解决这些问题是分别绑定每个单选按钮并自己处理选择逻辑。 (如果选择了一个,则将“组”中其他人绑定的属性设置为false)
我希望它在下一个版本中得到修复。但与此同时,我单独绑定每个单选按钮,不要使用组名。
答案 1 :(得分:0)
为什么表单上只能检查一个单选按钮的原因与GroupName的范围有关。
当我尝试使用单选按钮且没有指定GroupName的两个用户控件实例时,单选按钮效果的范围仅限于用户控件内的组框。
如果为用户控件中的单选按钮指定了相同的GroupName,则表示窗口中的所有单选按钮具有相同的GroupName并包含在同一组中。一次只能检查整个窗口中组中的一个按钮。
答案是从单选按钮中删除GroupName属性,让GroupBox的自然分组生效。
答案 2 :(得分:0)
我在使用同一个用户控件的多个选项卡上遇到了类似的问题。删除了 GroupName,它按预期工作。 Doug 指出它们在所有创建的对象之间共享(范围广泛)。通过手动设置选中的值来完成这项工作。