在Windows Phone 7中使用foreach编程

本文关键字:foreach 编程 Windows Phone | 更新日期: 2023-09-27 18:12:02

我不久前用c#制作了一款名为《Isola》的游戏,现在我想用WP7制作另一款游戏。在c#"Windows窗体"开发中,您可以像这样使用foreach循环:

foreach (Button btn in this.Controls)
{item.enabled = true;}

我怎么能在WP7中写这个,因为它不喜欢Foreach循环和"控制"不存在??

在Windows Phone 7中使用foreach编程

在SilverLight (XAML)中,主控件(Page, Window, UserControl)的类型为ContentControl。

假设你有一个PanelControl (Grid, StackPanel,…)作为根目录的直接内容,你可以这样做:

foreach (var element in (this.Content as Panel).Children)
{
   if (element is Button) ...
}

这将在

中找到按钮
<UserControl ... >
   <Grid>
      <Button ... />
   </Grid>
</UserControl>

但是对于嵌套元素上的按钮,您将需要一个递归方法。

StackPanel(您提到的唯一特定使用)定义了一个Children属性,该属性可能会执行您正在寻找的操作。

从你发布的,我猜你使用的是WinForms。WP7的UI框架是Silverlight,这与Windows Forms有很大的不同。你的foreach没有什么问题,WP7或多或少使用。net Framework 3.0,当然这支持foreach语句。我的猜测是,你的"问题"与每一个更重要的错误。

您的控件集合确实不存在了。相反,你有一个Children集合,但它与控制集合有很大不同,你可能已经习惯了。我建议你更多地阅读WPF中的树,这对Silverlight也是有效的。此外,我强烈建议不要试图改变这样的行为。使用Silverlight,你手边有更好、更强大的工具,比如绑定和命令。