Windows Phone 7:如何从窗口获取所有按钮?

问题描述

| 如何从窗口获取所有按钮? (将IsEnabled属性设置为false)     

解决方法

        您可以遍历所有控件。例如:
foreach (var ctrl in LayoutRoot.Children)
{
      if (ctrl is Button)
         ((Button)ctrl).IsEnabled = false;
}
当然,“ 1”是默认名称。您可以根据需要将其更改为另一个容器。 编辑以允许嵌套面板的递归(在注释中提到)。
private void DisableAllButtons(Panel parent)
{

    foreach (var ctrl in parent.Children)
    {

        if (ctrl is Button)
        {

            ((Button)(ctrl)).IsEnabled = false;

        }
        else
        {
             if (ctrl is Panel)
             {
                  if (((Panel)ctrl).Children.Count > 0)
                  {

                      DisableAllButtons((Panel)ctrl);

                  }
              }

         }

     }

  }
    ,        好吧,DisableAllButtons()有时可能会起作用,但是总的来说是不够的。这是一个真实的例子。 (经过一些简化。) 列表框   滚动查看器     边境       格网         ScrollContentPresenter           项目演示者             虚拟化堆栈面板               ListBoxItem                 ContentPresenter                   格网                     文字区块                     文字区块                     纽扣               ListBoxItem                 ContentPresenter                   格网                     文字区块                     文字区块                     文字区块         滚动条           格网             格网               重复按钮               拇指                 长方形               重复按钮 如果您想要一个可靠的解决方案,则代替枚举Panel子级使用 VisualTreeHelper类及其方法GetCildrenCount()和GetChild()。这是代码:
void DisableAllButtons(FrameworkElement fe)
{
    if (fe is Button)
        ((Button)(fe)).IsEnabled = false;

    int count = VisualTreeHelper.GetChildrenCount(fe);
    for (int index = 0; index < count; ++index)
    {
        DisableAllButtons( (FrameworkElement)VisualTreeHelper.GetChild(fe,index) );
    }
}