[英]How I access to controls into a DataTemplate in Silverlight?
我在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;
现在,我想访问每个组合框以查看是否已选中,例如:
if (chk2.IsChecked) ...
if (chk1.IsChecked) ...
但是,问题是:chk1,chk2,...无法用于请求它们,我想使用“ for”或“ foreach” 1到n进行通用循环,其中n是CheckBox的数量一次在ContentControl中
我不知道该怎么做,或者如果我做对了,有人可以指导我吗?
在这种环境下,我真的很新,谢谢
您可以使用AnthonyWJones在本文中创建的扩展方法
这是代码
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操作。
foreach(var checkBox in checkBoxes)
{
if(checkBox.IsChecked)
{
//Do Something
}
}
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.