簡體   English   中英

如何在Silverlight中訪問控件到DataTemplate中?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM