2017-01-11 116 views
0

所以只是试图以编程方式遍历一个特定的stacklayout的子元素,并获得这些元素的子元素。我迭代的第一个元素给了我一个Children对象的选项。作为这样:通过元素迭代迭代的问题

var TextContainerChildren = TextContainer.Children;

TextContainer是StackLayout拿着一束其它stacklayouts的。因此:

<StackLayout x:Name="TextContainer" Padding="10,10,10,0"> 
       <Label Text="What's New" FontSize="20" /> 
       <!--<StackLayout Orientation="Vertical" Padding="0,10,0,10"> 
       <Label Font="15" Text="Version 2.3.1 - January 9, 2017" TextColor="Blue" /> 
       <Label Font="15" Text=" &#8226; Breaking News Push Notifications. Users can now subscribe to breaking news push notifications that display an alert on your phone when a breaking news story is published." /> 
       <Label x:Name="LabelEmailHelp" Font="15" Text="" /> 
       </StackLayout>--> 

       <StackLayout Orientation="Vertical" Padding="0,10,0,10"> 
       <Label Font="15" Text="Version 2.3.1 - January 12, 2017" TextColor="Blue" /> 
       <Label Font="15" Text=" &#8226; Minor bug fixes." /> 
       <Label x:Name="LabelEmailHelp" Font="15" Text="" /> 
       </StackLayout> 
</StackLayout> 

所以现在我试图通过TextContainer.Children迭代这样:

foreach(Xamarin.Forms.View el in TextContainerChildren) 
{ 
    if(el.GetType() == typeof(Xamarin.Forms.StackLayout)) 
    { 
     var j = el; 
    } 
} 

的问题是,el不让我访问的孩子们。 (试图做el.Children不起作用,我的意思是,当我在调试中查看对象时,没有Children)。但是,当我正在调试时,我可以看到el是一个StackLayout,在base中我看到了Children对象。

有什么办法可以访问base的元素吗?如果没有,任何人都知道我怎么能读一个迭代元素的孩子?

回答

2

你需要投它

if(el.GetType() == typeof(Xamarin.Forms.StackLayout)) 
{ 
    StackLayout j = (StackLayout)el; 

    // now you can use j.Children 
} 
+0

是啊,只是想通了这一点,就会接受你的答案时,我可以。谢谢。 – jdmdevdotnet