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 :

Mettre le focus sur un Control contenu dans un DataTemplate


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut Mettre le focus sur un Control contenu dans un DataTemplate
    Bonjour à tous,

    Je ne trouve pas la solution à mon problème. J'aimerais positionner le Focus sur un contrôle qui fait partie d'un DataTemplate.

    En bref, j'ai un contrôle de type ContentControl qui est associé à un DataTemplateSelector afin de définir son contenu. J'ai donc 2 DataTemplate, un contenant un Textbox et l'autre un RichTextBox, j'aimerais positionner le focus sur le TextBox mais je n'y arrive pas

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A quel moment veux-tu mettre le focus sur le contrôle ? Au moment où il est chargé (évènement Loaded) ?

    Pour faire ça, tu peux utiliser une propriété attachée :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TextBlock Text="{Binding Text}"
               bhv:FocusBehavior.FocusOnLoad="True" />

    Voilà le code de la propriété attachée :

    Code C# : 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
    53
    54
    55
    56
    57
    58
    59
        public static class FocusBehavior
        {
            #region FocusOnLoad
     
            [AttachedPropertyBrowsableForType(typeof(FrameworkElement))]
            public static bool GetFocusOnLoad(FrameworkElement obj)
            {
                return (bool)obj.GetValue(FocusOnLoadProperty);
            }
     
            public static void SetFocusOnLoad(FrameworkElement obj, bool value)
            {
                obj.SetValue(FocusOnLoadProperty, value);
            }
     
            public static readonly DependencyProperty FocusOnLoadProperty =
                DependencyProperty.RegisterAttached(
                  "FocusOnLoad",
                  typeof(bool),
                  typeof(FocusBehavior),
                  new UIPropertyMetadata(
                    false,
                    FocusOnLoadChanged));
     
            private static void FocusOnLoadChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
            {
                FrameworkElement element = o as FrameworkElement;
                if (element == null)
                    return;
     
                bool oldValue = (bool)e.OldValue;
                bool newValue = (bool)e.NewValue;
     
                if (oldValue && !newValue)
                {
                    if (!element.IsLoaded)
                        element.Loaded -= element_Loaded;
                }
                else if (newValue && !oldValue)
                {
                    if (!element.IsLoaded)
                        element.Loaded += element_Loaded;
                    else
                        element.Focus();
                }
            }
     
            static void element_Loaded(object sender, RoutedEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                if (element == null)
                    return;
                element.Loaded -= element_Loaded;
                element.Focus();
            }
     
            #endregion
     
        }

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut
    Merci beaucoup, c'est tout à fait ce qu'il me fallait !

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

Discussions similaires

  1. [Toutes versions] Mettre le focus sur un champ dont le nom est contenu dans une variable
    Par possible924 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/04/2015, 21h32
  2. [Débutant] Donner le focus sur un TextBox contenu dans le template d'une ListBox
    Par Rakken dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 02/10/2012, 14h33
  3. [Débutant] Pointer sur un controle contenu dans un panel
    Par diblasio dans le forum C#
    Réponses: 6
    Dernier message: 13/04/2012, 17h51
  4. Réponses: 2
    Dernier message: 01/05/2006, 18h02
  5. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06

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