【问题标题】:wpf user control RadioButton preselectionwpf 用户控件 RadioButton 预选
【发布时间】:2010-12-24 06:03:44
【问题描述】:

我有一个非常简单的用户控件(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

【问题讨论】:

    标签: c# wpf radio-button ischecked


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 如果您想将两个单选按钮放在不同的容器中(例如 StackPanel),但仍希望将它们分组(即一次只选择一个)怎么办?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 2012-02-17
        • 2016-09-27
        相关资源
        最近更新 更多