我在Windows 8中使用Silverlight 5.1.30514.0,我有一个案例,其中根据表中的字段我需要提供不同数量的CheckBox,如果字段为4,则为4 CheckBox ,如果字段是6,那么6 CheckBox,这个字段可以是4,6,10或12,然后我在资源:
<DataTemplate x:Name="chkField4" DataType="ContentControl">
<Grid Name="grd">
<Border BorderBrush="Black" BorderThickness="1" Margin="0,0,0,0" Background="DarkSeaGreen" />
<CheckBox Content="2" Name="chk2" Grid.Column="1" Margin="20,20,20,20" Checked="CheckBox_Checked" />
<CheckBox Content="1" Name="chk1" Grid.Column="1" Margin="20,60,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="4" Name="chk4" Grid.Column="1" Margin="80,20,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="3" Name="chk3" Grid.Column="1" Margin="80,60,20,20" Checked="CheckBox_Checked"/>
</Grid>
</DataTemplate>
另一个:
<DataTemplate x:Name="chkField6" DataType="ContentControl">
<Grid Name="grd">
<Border BorderBrush="Black" BorderThickness="1" Margin="0,0,0,0" Background="DarkSeaGreen" />
<CheckBox Content="2" Name="chk2" Grid.Column="1" Margin="20,20,20,20" Checked="CheckBox_Checked" />
<CheckBox Content="1" Name="chk1" Grid.Column="1" Margin="20,60,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="4" Name="chk4" Grid.Column="1" Margin="80,20,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="3" Name="chk3" Grid.Column="1" Margin="80,60,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="6" Name="chk6" Grid.Column="1" Margin="140,20,20,20" Checked="CheckBox_Checked"/>
<CheckBox Content="5" Name="chk5" Grid.Column="1" Margin="140,60,20,20" Checked="CheckBox_Checked"/>
</Grid>
</DataTemplate>
每个案例还有2个类似的(chkField10,chkField12)。 我放了一个ContentControl:
<ContentControl Name="chk" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
如果字段= 4:
,则依赖于字段的代码chk.ContentTemplate = chkField4;
现在,我想访问每个ComboBox以查看是否已选中,如:
if (chk2.IsChecked) ...
if (chk1.IsChecked) ...
但是,问题是:chk1,chk2,...无法询问它们,我想用&#34; for&#34;进行通用循环。或者&#34; foreach&#34; 1到n,其中n是ContentControl中时间内CheckBox的数量
我不知道如何做到这一点,或者如果我做得对,有人可以指导我吗?
我在这个环境中真的很新,谢谢
答案 0 :(得分:0)
您可以使用AnthonyWJones在this post
中创建的扩展方法这是代码
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i=0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
}
然后,要访问contentcontrol中的复选框,您可以这样做,假设您的contentcontrol的名称是chk。 (尝试使用更好的名称进行contentcontrol以避免混淆)
var checkBoxes = chk.Descendents().OfType<CheckBox>();
然后你可以对复选框的收集做一个预测。
foreach(var checkBox in checkBoxes)
{
if(checkBox.IsChecked)
{
//Do Something
}
}
希望有所帮助。