我用C#做了一个叫Isola的游戏,现在我想用WP7再做一个。在C# "Windows form“开发中,你可以像这样使用这个foreach循环:
foreach (Button btn in this.Controls)
{item.enabled = true;}我怎么能用WP7写这个呢,因为它不像Foreach循环,而且“控件”也不存在?
发布于 2011-10-24 01:48:05
在SilverLight (XAML)中,主控件(页面、窗口、UserControl)是ContentControl类型。
假设你有一个网格( PanelControl,StackPanel,..)作为根目录的直接内容,您可以这样做:
foreach (var element in (this.Content as Panel).Children)
{
if (element is Button) ...
}这将在以下位置找到按钮
<UserControl ... >
<Grid>
<Button ... />
</Grid>
</UserControl>但是对于嵌套元素上的按钮,您将需要一个递归方法。
发布于 2011-10-24 01:49:18
StackPanel (您提到的唯一特定的使用)定义了一个Children property,它可能会执行您正在寻找的操作。
发布于 2011-10-24 01:52:17
从你发布的信息来看,我猜你用的是WinForms。在WP7上,UI框架是Silverlight,这与Windows Forms有很大的不同。你的foreach没有什么问题,WP7或多或少使用了.NET Framework3.0,当然这支持foreach语句。我的猜测是,你的foreach的“问题”更多的是一个相应的错误。
你的控件集合确实已经不存在了。相反,您有一个Children集合,但它与Controls集合有很大的不同,您可能已经习惯了。我建议你多读一读Trees in WPF,它也适用于Silverlight。此外,我强烈建议不要尝试像这样改变行为。你手头上有更好更强大的工具使用Silverlight,比如Bindings和Commands。
https://stackoverflow.com/questions/7867857
复制相似问题