Usuário com melhor resposta
Em WPF tem como definir um evento GotFocus para Textbox no App.xaml e reutilizá-lo em toda a aplicação?

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.
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:
Pronto! Tá resolvido... Todos os TextBoxes da sua aplicação, ao receberem foco, terão o Background = Red...<Application.Resources> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="IsFocused" Value="true"> <Setter Property="Background" Value="Red"/> </Trigger> </Style.Triggers> </Style> </Application.Resources>
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 16 de fevereiro de 2011 17:21
- Marcado como Resposta Tiago C. Maia segunda-feira, 21 de fevereiro de 2011 11:25
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:
Pronto! Tá resolvido... Todos os TextBoxes da sua aplicação, ao receberem foco, terão o Background = Red...<Application.Resources> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="IsFocused" Value="true"> <Setter Property="Background" Value="Red"/> </Trigger> </Style.Triggers> </Style> </Application.Resources>
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 16 de fevereiro de 2011 17:21
- Marcado como Resposta Tiago C. Maia segunda-feira, 21 de fevereiro de 2011 11:25
-
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).