2013-06-26 113 views
1

我已经调查了这个问题,但是这是在设计视图和代码隐藏解决。但我的问题并没有什么不同:我试图将其作为只有代码隐藏功能,因为我的复选框是根据数据库数据动态创建的。换句话说,我的复选框数量不稳定。我想只检查一组复选框中的一个复选框。当我点击一个复选框时,我想让其他复选框的缺陷属性变成false.this是单选按钮中的相同属性。我从一个StackPanel我复选框在XAML的一面:复选框像radiobutton wpf c#

<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? 在此先感谢..

+0

任何原因想让复选框像单选按钮而不是使用单选按钮? –

+0

我只是想知道如何做到这一点。我想试试这个。 – rockenpeace

+0

对不起..现在我意识到我有一个选择,这些复选框都不能检查 – rockenpeace

回答

3

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

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

我认为应该做的伎俩(关闭我的头顶)。

下面是一些代码,我只是敲了,应该帮助:

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; 
      } 
     } 
    } 
+0

我会尝试,我会给一个反馈..谢谢.. – rockenpeace

+0

这有效吗?抱歉,我无法在如此短的时间内提供代码。 – BaconSah

+0

不..不幸的是我无法做到这一点.. – rockenpeace