Clique e receba as novidades quentinhas no Telegram

Olá pessoal, tudo bom?

Aproveito uma questão que me fizeram para escrever esse post que demonstra como obter acesso a controles que estão posicionados dentro do ItemTemplate de um determinado ListBox ou outro container qualquer.

Tomando por base a seguinte definição para um ListBox cuja finalidade seria exibir tipos de pizzas e seus respectivos ingredientes:

...

  
    
      
        
          
          
        
      
    
  

...

Considerando ainda a existência de um botão que irá destacar todos os TextBlocks que exibem os ingredientes das pizzas (trocar a cor do texto Foreground)

...

...

Repare agora que utilizei um método genérico em C# que permite localizar controles dentro de um determinado container (no nosso caso o ListBox lbSabores), sendo que para o caso, faço uma pergunta buscando por um determinado TextBlock chamado txtIngredientes e, quando encontrado, troco a cor da fonte do mesmo.

...
private void Destacar(DependencyObject targetElement)
{
  var count = VisualTreeHelper.GetChildrenCount(targetElement);
  if (count == 0)
    return;
  for (int i = 0; i < count; i++)
  {
    var child = VisualTreeHelper.GetChild(targetElement, i);
    if (child is TextBlock)
    {
      TextBlock targetItem = (TextBlock)child;
      if (targetItem.Name == "txtIngredientes")
      {
        targetItem.Foreground = new SolidColorBrush(Colors.Green);
        return;
      }
    }
    else
    {
      Destacar(child);
    }
  }
}
...

Agora, imaginando que o usuário toque no botão “Destacar Ingredientes” podemos chamar o método Destacar e passar para ele o ListBox que contem os elementos que queremos localizar.

...
private void btnDestacar_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Destacar(lbSabores);
}
...

controles-localizar-wp

Espero ter ajudado!

Posts Relacionados: 

Grande abraço,
Eduardo Henrique Rizo (@eduardorizo)

Fonte: Blog do Eduardo H. Rizo