【问题标题】:checkbox like radiobutton wpf c#复选框,如单选按钮 wpf c#
【发布时间】:2013-06-26 12:46:53
【问题描述】:

我已经调查过这个问题,但这在设计视图和代码隐藏中得到了解决。但我的问题几乎没有什么区别:我尝试仅将其作为代码隐藏来执行,因为我的复选框是根据数据库数据动态创建的。换句话说,我的复选框数量不稳定。我只想检查一组复选框中的一个复选框。当我单击一个复选框时,我希望其他复选框的 ischecked 属性变为 false。这是单选按钮中的相同属性。我从 xaml 端的堆栈面板中取出我的复选框:

<StackPanel Margin="4" Orientation="Vertical"  Grid.Row="1" Grid.Column="1" Name="companiesContainer">
            </StackPanel>

我的 xaml.cs:

using (var c = new RSPDbContext())
        {
            var q = (from v in c.Companies select v).ToList();

            foreach (var na in q)
            {
                CheckBox ch = new CheckBox();
                ch.Content = na.Name;
                ch.Tag = na;
                companiesContainer.Children.Add(ch);
            }
        }

foreach (object i in companiesContainer.Children)
            {
                CheckBox chk = (CheckBox)i;

                chk.SetBinding(ToggleButton.IsCheckedProperty, "DataItem.IsChecked");
            }

如何在 xaml.cs 的复选框中提供此属性? 提前谢谢..

【问题讨论】:

  • 有什么理由让复选框表现得像单选按钮而不是使用单选按钮?
  • 我只是想知道该怎么做。我想试试这个。
  • 对不起..现在我意识到我可以选择这些复选框都不能被选中

标签: c# wpf xaml wpf-controls wpftoolkit


【解决方案1】:

为选中的事件添加一个事件处理程序。创建复选框时,将这个(相同的)事件处理程序添加到每个复选框。

在事件处理程序中,遍历您添加的每个复选框,并为每个复选框取消选中它,除非它与发送者的复选框相同。

我认为应该做的伎俩(在我的脑海中)。

这是我刚刚敲出的一些代码,应该会有所帮助:

XAML 部分只是一个堆栈面板,名为:Name="checkboxcontainer"

代码隐藏部分:

    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        CreateCheckboxes();
    }

    private void CreateCheckboxes()
    {
        for (int i = 0; i <= 5; i++)
        {
            CheckBox c = new CheckBox();
            c.Name = "Check" + i.ToString();
            c.Checked += c_Checked; //This is adding the event handler to the checkbox
            checkboxcontainer.Children.Add(c);
        }
    }

    // This is the event handler for the checkbox
    private void c_Checked(object sender, RoutedEventArgs e) 
    {
        foreach (var control in checkboxcontainer.Children)
        {
            if (control is CheckBox && control != sender)
            {
                CheckBox cb = (CheckBox)control;
                cb.IsChecked = false;
            }
        }
    }

【讨论】:

  • 这有效吗?抱歉,我无法在这么短的时间内提供代码。
  • 为什么做不到,不懂的地方解释一下?
  • 这样会更简单吗?
  • 我已经创建了一个。 c_Checked 函数是一个事件处理程序。
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 2011-10-18
  • 2013-05-22
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多