获得一个包含StackPanel的WPF表单,其中包含ExpPaders和StackPanels。
<Expander Name="eSoftware" Header="5 Software">
<StackPanel Name="StSoftware" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,0,8,0">
<StackPanel Margin="0,10" Width="29">
<Image x:Name="img" Height="26" Source="Images/3453120.png" Stretch="Fill" Margin="0,0,0,0"/>
</StackPanel>
<StackPanel Margin="0,10">
<Label x:Name="lbl" Content="Label" Margin="0,0,0,0" />
</StackPanel>
</StackPanel>
</Expander>
我在对象列表中阅读了Expander的内容。 现在我必须知道列表是否包含stackpanel类型的对象。
List<Object> tmpList = new List<Object>();
tmpList = ReadChild((StackPanel)exp.Content) //gives out the content of an expander. In the Upper case it is 2 StackPanels
if(tmpList.Contains.typeof(StackPanel)=true) //that's wrong
{
//search for the Stackpanel with lables in it
}
答案 0 :(得分:2)
您可以使用OfType<>
过滤列表中的特定类型。我知道你想循环遍历所有StackPanels(在列表中),所以你可以这样做:
foreach(var panel in tmpList.OfType<StackPanel>()){
//your work here ...
}
如果要检查是否有任何StackPanel,请使用:
if(tmpList.OfType<StackPanel>().Any()){
//...
}
答案 1 :(得分:0)
如果我理解正确,您可以使用此LINQ表达式
var w = tmpList.Where(x=>x.IsTypeOf(StackPanel)).SingleOrDefault();
答案 2 :(得分:0)
我会这样做:使用Enumerable.OfType<>()
更多信息:https://msdn.microsoft.com/en-us/library/vstudio/bb360913(v=vs.100).aspx
foreach(var stackpanel in tmpList.OfType<StackPanel>())
{
// search for the label. (the same trick)
var myLabel = stackpanel.Children.OfType<Label>().FirstOrDefault();
// if the label can't be found, continue to the next one.
if(myLabel == null)
continue;
myLabel.Content = "whatever";
}
答案 3 :(得分:0)
问题的这一部分回答的问题并不多。 &#34;现在我必须知道列表是否包含stackpanel类型的对象。&#34; 这可以通过以下方式实现:
if (tmpList.Any(x=>x.IsTypeOf(StackPanel)))
{
//returns true if there are any stack panels in the list
}