【发布时间】:2018-02-23 18:34:02
【问题描述】:
所以,我希望标题是不言自明的,但与往常一样,会更好地描述它。 我正在尝试将 很多 个复选框放入一个列表中,这样当我选中另一个复选框时,我可以使用它们的索引取消选中它们。
我的 XAML 的一个简短部分,因为它有点长且大部分重复
<Expander Header="Tercer Ciclo" FontWeight="Bold" Width="auto" Height="auto">
<StackPanel>
<Expander Header="9° Grado" Margin="20,0,0,0">
<StackPanel>
<CheckBox x:Name="NovA" Margin="40,0,0,0" Content="Noveno A" />
<CheckBox x:Name="NovB" Margin="40,0,0,0" Content="Noveno B" />
<CheckBox x:Name="NovC" Margin="40,0,0,0" Content="Noveno C"/>
<CheckBox x:Name="NovD" Margin="40,0,0,0" Content="Noveno D"/>
<CheckBox x:Name="NovE" Margin="40,0,0,0" Content="Noveno E"/>
</StackPanel>
</Expander>
这个结构又重复了 7 次左右。问题是,当我选择一个时,我希望其他的取消选中。它并不会真正影响程序的正确运行,它只是更美观并为用户定位。
在你开始大喊我应该使用那个或这个之前。我试过了:
- 使用单选按钮,但由于它是另一个列表中的列表,所以效果不太好。
- 我搜索了如何创建一个列表来插入窗口的控件,并找到了一个答案,但它适用于 WinForms,我不知道如何在 WPF 上执行此操作,因为它有不同的方法。
- 试图手动插入 CheckBox 的名称,一个一个...我没完成;即便如此,控件的
foreach语法...
我将此作为后面代码的参考: [Assign checkboxes to an checkbox-array using a for loop in C#]
我已经有了,我看到的代码几乎正是我想要的,但同样适用于 WinForms,因此 foreach 语法类型不适合 WPF
private void Window_Loaded(object sender, RoutedEventArgs e)
{
List<CheckBox> listCheck = new List<CheckBox>();
foreach (Control checkbox in //Invoke the window's Controls, don't know the syntaxis)
{
//Add the Checkbox's x:Name on the list...
}
}
很抱歉,如果我发了这么长的帖子,但我已经为此绞尽脑汁好几个星期了,还没有找到任何线索来说明我错过了什么…… 总的来说,我对 WPF 和 C# 还很陌生,所以是的,有点迷路了。
【问题讨论】:
-
你会更乐意使用带有 ItemsControl 的 MVVM 来做这种事情。
-
如果你使用 StackPanel 的属性 Name 你可以使用它的 children 属性来获取所有的控件。