[英]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.