Windows Phone 7: как получить все кнопки из окна? - PullRequest
0 голосов
/ 01 июня 2011

как получить все кнопки из окна?(чтобы установить для свойства IsEnabled значение false)

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Вы можете перебрать все элементы управления.Например:

foreach (var ctrl in LayoutRoot.Children)
{
      if (ctrl is Button)
         ((Button)ctrl).IsEnabled = false;
}

Конечно, LayoutRoot является именем по умолчанию.Вы можете изменить это на другой контейнер, если вам нужно.

Отредактировано, чтобы разрешить рекурсию для вложенных панелей (упоминается в комментариях).

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);

                  }
              }

         }

     }

  }
1 голос
/ 01 июня 2011

Ну, DisableAllButtons () может иногда работать, но в целом недостаточно.Вот пример из реальной жизни.(После некоторого упрощения.)

ListBox 
  ScrollViewer 
    Border 
      Grid 
        ScrollContentPresenter 
          ItemsPresenter 
            VirtualizingStackPanel 
              ListBoxItem 
                ContentPresenter 
                  Grid 
                    TextBlock 
                    TextBlock 
                    Button 
              ListBoxItem 
                ContentPresenter 
                  Grid 
                    TextBlock 
                    TextBlock 
                    TextBlock 
        ScrollBar
          Grid 
            Grid 
              RepeatButton 
              Thumb 
                Rectangle 
              RepeatButton 

Если вам нужно надежное решение, то вместо перечисления 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) );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...