IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Probleme CustomControl Textbox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 69
    Points
    69
    Par défaut Probleme CustomControl Textbox
    Bonjour,

    Voila j'ai un petit problème, je me lance dans les app wpf, et j'aimerai créer un textbox personnalisé.

    Donc je rajoute un élément à mon projet, (wpf/custom control)

    J'obtiens une classe avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    Imports System.Windows.Controls.Primitives
     
     
    Public Class TextBoxcustom
        Inherits System.Windows.Controls.TextBox
     
        Shared Sub New()
            'Cet appel OverrideMetadata indique au système que cet élément souhaite apporter un style différent de celui de sa classe de base.
            'Ce style est défini dans themes\generic.xaml
            DefaultStyleKeyProperty.OverrideMetadata(GetType(TextBoxcustom), new FrameworkPropertyMetadata(GetType(TextBoxcustom)))
        End Sub
     
    End Class
    Le code xaml generic :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1">
     
     
        <Style TargetType="{x:Type local:TextBoxcustom}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:TextBoxcustom}">
                        <Border Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}">
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    Et ceci dans mainwindow.xaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     xmlns:MyNamespace="clr-namespace:WpfApplication1"


    Ensuite je génère mon projet, et je vois apparaitre mon customcontrole dans la barre d'outil, donc je le rajoute sur ma fenêtre, et je lance l'execution histoire de voir s'il apparait bien ce textbox....

    Et bien non! il n'apparait pas :'(
    ça fait quelques dizaines de minutes que je cherche pourquoi et je ne trouve pas, je comprend pas pourquoi ça marche pas :/

    Donc si vous pouviez m'aider svp

    Merci !

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Le ControlTemplate que tu as défini ne comporte qu'une simple bordure. Si tu regardes le lien suivant, tu peux voir qu'il y a certains points à respecter pour définir un ControlTemplate de TextBox :
    http://msdn.microsoft.com/fr-fr/library/ms752068.aspx
    Citation Envoyé par msdn
    Le ControlTemplate d'une TextBox doit contenir un seul élément identifié comme l'élément de l'hôte de contenu ; cet élément sera utilisé pour restituer le contenu de la TextBox.Pour identifier un élément comme hôte de contenu, assignez-lui le nom spécial PART_ContentHost.L'élément de l'hôte de contenu doit être un ScrollViewer ou un AdornerDecorator.L'élément de l'hôte de contenu ne peut pas héberger d'éléments enfants.
    Ce qui donnerait quelque chose comme :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                    <ControlTemplate TargetType="{x:Type local:TextBoxcustom}">
                        <Border Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}">
                          <ScrollViewer SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" x:Name="PART_ContentHost" VerticalAlignment="Stretch" />
                        </Border>
                    </ControlTemplate>

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 69
    Points
    69
    Par défaut
    Ok ça marche merci

    Cependant j'aimerai bien aussi un peu d'aide.. concernant la personnalisation donc,

    Par exemple j'ai ma classe de mon nouveau textbox, comment s'y prendre pour définir une méthode qui modifie le contenu du textbox (.text) à l'intérieur de la classe.

    Si je met cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CurrencyTextbox_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles CurrencyTextBox.TextChanged
     
        End Sub
    j'ai une erreur au niveau du currencytextbox, il me dit qu'il me faut une méthode with events

    Et autrement donc "currencytextbox" = textbox sur laquelle on est actuellement ? c'est comme ça qu'il repère à quel control il faut appliquer une méthode ?

    Merci

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Je suis pas sûr d'avoir cerné ce que tu veux faire exactement, mais pour accéder aux propriétés de ta TextBox, il te suffit de faire :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Text = "mon texte";
    Car ton CustomControl hérite de TextBox. En vb, c'est surement "Me.Text"

    Sinon pour t'abonner à un événement dans ton CustomControl, tu peux faire comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public override void OnApplyTemplate() {
          base.OnApplyTemplate();
     
          // Abonnement à l'évènement TextChanged
          this.TextChanged += new TextChangedEventHandler(TextBoxcustom_TextChanged);
        }
     
        private void TextBoxcustom_TextChanged(object sender, TextChangedEventArgs e) {
          if (this.Text.Contains('*')) MessageBox.Show("Vous avez utilisé le caractère '*'.");
        }

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 69
    Points
    69
    Par défaut
    Niquel, merci beaucoup !

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Cool. Penses au tag (bouton en bas de page)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec textbox
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/12/2007, 19h22
  2. [débutant] probleme taille TextBox
    Par Knightrider76 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 06/07/2007, 18h03
  3. probleme de textbox
    Par lesafir dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/07/2007, 11h03
  4. probleme ID textbox tableau ASP
    Par onizuka159 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/06/2007, 14h49
  5. [C#] Probleme avec TextBox dans un DataGrid
    Par Oberown dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/12/2004, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo