Criando um controle TextBox personalizado WPF para SILVERLIGHT
-
terça-feira, 7 de agosto de 2012 13:30
Saudações caros colegas
Estou precisando criar um TEXTBOX CUSTOMIZADO para utilizá-lo em toda minha aplicação que seja possível:
1) Ter uma cor ao receber foco;
2) Outra cor ao perder o foco;
3) Retirar os espaços do começo e fim do conteúdo digitado se houver ao perder o foco;
4) Converter o conteúdo para maiúsculas ao perder o foco;Achamos um tutorial aqui no MSDN que nos possibilitou iniciar (http://msdn.microsoft.com/pt-br/netframework/hh239582.aspx) mas ainda assim existem algumas questões que nos causam muitas dúvidas referente a criação e manipulação dos eventos.
Como podem ver, as propriedades deverão ser alteradas nos eventos de foco.
Não consigo identificar onde e como implementar os eventos de modo que ele esteja no controle em questão.Desde já agradeço a atenção do colegas!!!
Eduardo Agostinho Analista Programador - C# Developer
Todas as Respostas
-
sexta-feira, 17 de agosto de 2012 16:04Moderador
Ola Eduardo,
Apesar de existirem formar de customizar os controles WPF apenas usando os Templates, algumas veses eu prefiro fazer a moda antiga. Isso depende da implementação que voce vai dar, da metodologia da sua empresa e etc... cada caso é um caso e existem vantagens e desvantagem nas duas formas.
Então uma forma de fazer as implementações que vc gostaria seria essa:
public class CustomTextBox: TextBox { public static readonly DependencyProperty NormalBackgroudProperty = DependencyProperty.Register("NormalBackgroud", typeof(Brush), typeof(CustomTextBox), new PropertyMetadata(null)); public static readonly DependencyProperty FocusedBackgroudProperty = DependencyProperty.Register("FocusedBackgroud", typeof(Brush), typeof(CustomTextBox), new PropertyMetadata(null)); public Brush FocusedBackgroud { get { return (Brush)GetValue(FocusedBackgroudProperty); } set { SetValue(FocusedBackgroudProperty, value); var focused = FocusManager.GetFocusedElement(); if (Object.ReferenceEquals(this, focused) == true) { this.Background = value; } } } public Brush NormalBackgroud { get { return (Brush)GetValue(NormalBackgroudProperty); } set { SetValue(NormalBackgroudProperty, value); var focused = FocusManager.GetFocusedElement(); if (Object.ReferenceEquals(this, focused) == false) { this.Background = value; } } } protected override void OnGotFocus(RoutedEventArgs e) { if (Object.ReferenceEquals(this, e.OriginalSource)) { this.Background = FocusedBackgroud; } base.OnGotFocus(e); } protected override void OnLostFocus(RoutedEventArgs e) { if (Object.ReferenceEquals(this, e.OriginalSource)) { this.Background = NormalBackgroud; this.Text = this.Text.Trim().ToUpper(); } base.OnLostFocus(e); } }- Marcado como Resposta Eduardo Agostinho quinta-feira, 30 de agosto de 2012 17:06

