【问题标题】:How to select only one checkbox at a time in WPF?如何在 WPF 中一次只选择一个复选框?
【发布时间】:2017-07-22 00:06:31
【问题描述】:

我必须保留 2 个复选框,并且一次只能选择一个。但在我的以下代码中,两者都被选中。我应该如何在 WPF 中实现我的功能?

<StackPanel Orientation="Vertical" Name="spRoles">

<CheckBox Name="chkMale" Content="Male" />
<CheckBox Name="chkFemale" Content="Female" />

</StackPanel>

我只能使用复选框而不是单选按钮。

【问题讨论】:

  • 为什么不能使用单选按钮?它们通常用于这类事情。
  • 此外,不使用单选按钮会使 UI 用户感到困惑。至少如果我是那个用户,我希望能够选择多个复选框。使用单选按钮可以立即清楚我只能选择一个。
  • 因为我必须制作类似于 gmail 设置选项卡的功能。在那里,您只能在一个选项上打一个勾号。

标签: c# wpf wpf-controls


【解决方案1】:

监听选择事件或类似事件并选中另一个复选框

public void MaleOnSelection(object sender, EventArgs e)
{
    if(chkFemale.Selected)
        chkFemale.Selected=false;
}

显然你必须为女性复选框做同样的事情

无论如何,其他单选按钮会更好,如果需要,您可以将其设置为复选框

【讨论】:

    【解决方案2】:

    在你的情况下,你应该使用单选按钮。

    允许复选框只选择一个,没有意义。

    如果你仍然使用复选框,那么复选框的整个概念就会消失。

    【讨论】:

      【解决方案3】:

      在这种情况下,只需使用单选按钮而不是复选框。复选框主要用于多项选择。

      【讨论】:

        【解决方案4】:

        对于那些有目标的人并且不同意允许复选框只选择一个是没有意义的。您可以为组中的每个复选框调用该方法。

            private void uncheckCheckBoxes(object sender)
            {
                if (radioButtonEdit.IsChecked == true)
                {
                    CheckBox currentcheckbox = (CheckBox)sender;
        
                    foreach (var checkBox in ManyCheckBoxes.Children.OfType<CheckBox>().Where(cb => (bool)cb.IsChecked))
                    {
                        if (!currentcheckbox.Name.Equals(checkBox.Name))
                        {
                            checkBox.IsChecked = false;
                        }
                    }
                 }
            }
        
            private void checkbox1_Checked(object sender, RoutedEventArgs e)
            {
                uncheckCheckBoxes(sender);
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-11
          • 1970-01-01
          • 2017-08-10
          相关资源
          最近更新 更多