none
Em WPF tem como definir um evento GotFocus para Textbox no App.xaml e reutilizá-lo em toda a aplicação? RRS feed

  • Pergunta

  • Olá a todos!

    No meu projeto WPF eu quero que todos os Textbox fiquem com a cor de fundo amarelo ao receberem foco. Como eu faço isso sem ter que programar o evento GotFocus das TextBox?

    No App.xaml eu defini as propriedades visuais dos Textbox para que todos eles fiquem iguais, mas a codificação para eles ficarem amarelo ao receberem foco e voltarem a ficar branco ao perderem foco estou tendo que fazer manualmente em todos os Textbox. Gostaria de colocar esse código em algum lugar e todas as Textbox automaticamente ficarem com o mesmo evento GotFocus e LostFocus. Tem como fazer isso?

    Segue o código do meu App.xaml

    <Application x:Class="tissGUI.App"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      StartupUri="index.xaml">
      
      <Application.Resources>
      
        <!-- Efeitos de Gradiente === -->
        <LinearGradientBrush x:Key="GradienteTextBoxBorda" EndPoint="1,0.5" StartPoint="0,0.5">
          <GradientStop Color="#FF03143B" Offset="0.151" />
          <GradientStop Color="#FF2B7DFF" Offset="1" />
        </LinearGradientBrush>
    
        <!-- Configurações dos Componentes de Tela === -->
        <Style TargetType="TextBox">
          <Setter Property="BorderThickness" Value="03" />
          <Setter Property="Height" Value="30" />
          <Setter Property="FontSize" Value="15" />
          <Setter Property="BorderBrush" Value="{StaticResource GradienteTextBoxBorda}" />
        </Style>
    
      </Application.Resources>
    </Application>
    

    E este é o código que uso em todos os eventos GotFocus e LostFocus para cada TextBox em todas as minhas telas. O código é sempre o mesmo!

    private void txtNomeUsuario_GotFocus(object sender, RoutedEventArgs e){
      ((TextBox)sender).Background = new SolidColorBrush(Color.FromArgb(255, 255, 255, 150));
    }
    
    private void txtNomeUsuario_LostFocus(object sender, RoutedEventArgs e){
      ((TextBox)sender).Background = Brushes.White;
    }
    

    É sempre o mesmo código! Não tem como colocar esse código em um lugar global e automaticamente todas as minhas TextBox receberem esses eventos (GotFocus e LostFocus)? O que eu não quero é programar para cada TextBox os seus eventos GotFocus e LostFocus.

    Agradecido,

    Tiago Maia.

    terça-feira, 8 de fevereiro de 2011 13:11

Respostas

  • Tiago,

    Que trabalhão deve ter dado pra você fazer isso hein!! E dá pra ser resolvido com poucas linhas... Veja só... No seu App.xaml, você pode definir um estilo para os TextBoxes assim:

      <Application.Resources>
        <Style TargetType="TextBox">
          <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
              <Setter Property="Background" Value="Red"/>
            </Trigger>
          </Style.Triggers>
        </Style>
      </Application.Resources>
    
    Pronto! Tá resolvido... Todos os TextBoxes da sua aplicação, ao receberem foco, terão o Background = Red...
    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 15 de fevereiro de 2011 16:07
    Moderador

Todas as Respostas

  • Tiago,

    Que trabalhão deve ter dado pra você fazer isso hein!! E dá pra ser resolvido com poucas linhas... Veja só... No seu App.xaml, você pode definir um estilo para os TextBoxes assim:

      <Application.Resources>
        <Style TargetType="TextBox">
          <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
              <Setter Property="Background" Value="Red"/>
            </Trigger>
          </Style.Triggers>
        </Style>
      </Application.Resources>
    
    Pronto! Tá resolvido... Todos os TextBoxes da sua aplicação, ao receberem foco, terão o Background = Red...
    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 15 de fevereiro de 2011 16:07
    Moderador
  • Perfeito!

    Funcionou certinho! Muito obrigado pela ajuda. Eu imaginava que existia algo para fazer isso. Só não acha em lugar nenhum.

    Desculpe pela demora na resposta, estava "sem acesso" a net temporariamente (muita correria no trabalho, nem dava para entrar aqui).

    segunda-feira, 21 de fevereiro de 2011 11:25