Criando um controle TextBox personalizado WPF para SILVERLIGHT

Respondido 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:04
    Moderador
     
     Respondido Contém Código

    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
    •