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 :

[templatebinding] problème de comprehension


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut [templatebinding] problème de comprehension
    Bonjour,
    voila j'ai un customcontrol dans lequel je défini le style avec une textbox dedans
    comme ceci
    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
     
        <Style TargetType="{x:Type local:CustomControlText}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:CustomControlText}">
                        <Border Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}">
                            <TextBox 
    <TextBox Text="{TemplateBinding Text}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
    je synchronise le text de la textbox avec un template binding sur la textproperty se trouvant dans le control
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     public class CustomControlText : Control
        {
            static CustomControlText()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControlText), new FrameworkPropertyMetadata(typeof(CustomControlText)));
            }
     
     
            //-------------------------------------------------------------------------------
            #region Text
            //-------------------------------------------------------------------------------
            public string Text
            {
                get { return (string)GetValue(TextProperty); }
                set { SetValue(TextProperty, value); }
            }
            //-------------------------------------------------------------------------------
            public static readonly DependencyProperty TextProperty =
                                  DependencyProperty.Register(
                                  "Text",
                                  typeof(string),
                                  typeof(CustomControlText),
                                  new FrameworkPropertyMetadata(String.Empty, 
                                      FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                                      new PropertyChangedCallback(TextChanged),
                                      new CoerceValueCallback(TextCoerce), 
                                      true, 
                                      UpdateSourceTrigger.LostFocus
                                          ));
            //-------------------------------------------------------------------------------
            public static Object TextCoerce(DependencyObject d, Object baseValue)
            {
                CustomControlText _CustomControlText = d as CustomControlText;
                // insert you code here          
     
                return baseValue; // replace this line if necessary
            }
            //-------------------------------------------------------------------------------
            public static void TextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                CustomControlText _CustomControlText = d as CustomControlText;
                // déactivated only used for simple type - int, double ... -)
                //string _Text = (string)e.NewValue;
                string _Text = e.NewValue as string;
                // insert you code here
     
            }
            //-------------------------------------------------------------------------------
            #endregion
            //-------------------------------------------------------------------------------
        }
    et la si je colle un binding sur le text d'un classe
    ca marche bien dans le sens class -> customcontrol
    mais des que l'on tape du text on perd le binding ...

    si je remplace la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Text="{TemplateBinding Text}" />
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:CustomControlText}},Path=Text}"/>
    ca marche bien

    j'aimerais juste comprendre pourquoi ici le templatebinding ne fonctionne pas
    et quel est la differente entre ces deux binding

    si quelqu'un a une idee ?
    Merci

  2. #2
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,
    le TemplateBinding ne sert qu'à binder une propriété du Control dont tu définis le template, vers un élément du template. En aucun cas tu ne peux faire un TemplateBinding TwoWay, donc quand tu tapes du texte dans la TextBox ça ne peut pas répercuter la valeur dans la propriété Text du custom control.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    et avec un binding sur un templateparent ca marcherait pas non plus ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Un TemplateBinding, c'est pour dire que tu veux prendre la propriété du contrôle templatisé et l'injectée dans le template.

Discussions similaires

  1. problème de comprehension fonctionnement JSF
    Par luperrot dans le forum JSF
    Réponses: 16
    Dernier message: 15/11/2012, 11h08
  2. probléme de comprehension d'un mini programme
    Par bensof1 dans le forum Débuter
    Réponses: 6
    Dernier message: 20/02/2012, 14h43
  3. Problème de comprehension
    Par goute dans le forum Services Web
    Réponses: 4
    Dernier message: 14/05/2010, 13h31
  4. [PHP 5.1] Problème de comprehension
    Par new_php dans le forum Langage
    Réponses: 2
    Dernier message: 24/11/2009, 09h26
  5. [Cookies] problème de comprehension-sessions
    Par fk04 dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2006, 21h09

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