我已经调查了这个问题,但这在设计视图和代码隐藏中得到了解决。但我的问题没有什么区别:我尝试这样做只是代码隐藏,因为我的复选框是根据数据库数据动态创建的。换句话说,我的复选框的数量不稳定。我想只检查一组复选框中的一个复选框。当我点击一个复选框时,我希望其他复选框的缺失属性变为false。这是radiobuttons中的相同属性。我从xaml方面的stackpanel中取出复选框:
<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 :(得分:3)
为已检查事件添加事件处理程序。创建复选框时,将此(相同)事件处理程序添加到每个复选框。
在事件处理程序中,运行您添加的每个复选框,对于每个复选框,取消选中它,除非它与发件人的复选框相同。
我认为应该做到这一点(在我的头脑中)。
以下是我刚刚敲定的一些应该有用的代码:
XAML部分只是一个名为的堆栈面板:Name =“checkboxcontainer”
Codebehind部分:
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;
}
}
}