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

Silverlight Discussion :

Accéder à une TextBox contenue dans un DataTemplate d'une DataGrid


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut Accéder à une TextBox contenue dans un DataTemplate d'une DataGrid
    Bonjour,
    J'aimerais accéder à une textBox contenue dans un dataTemplate d'une dataGrid. Mais la tâche s'avère être un peu compliquée...
    Je vous montre le code que je veux faire (j'ai testé avec une textBox normale, non contenue dans une dataGrid. Ca fonctionne bien, mais je veux remplacer le textbox1 par ma textBox contenue dans la dataGrid) :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     private void OnIncludeVariableInTranslationText(DocGen.ViewModel.TranslationViewModel.IncludeVariableInTranslationText includeVariableInTranslationText)
    {
       textbox1.SelectedText = includeVariableInTranslationText.Variable;
     
        if (includeVariableInTranslationText.TextTranslation != null)
        {
          includeVariableInTranslationText.TextTranslation.Translated = textbox1.Text;
         }
       }

    Et voici ma colonne concernée :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <sdk:DataGridTemplateColumn Header="Traduction" Width="500">
         <sdk:DataGridTemplateColumn.CellTemplate>
             <DataTemplate>
                 <TextBox Text="{Binding Translated, Mode=TwoWay}" SelectedText="{Binding SelectedText, Mode=TwoWay}" Style="{Binding ., Converter={StaticResource VariableCheckerConverter}, ConverterParameter='TextBox'}"/>
              </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
    </sdk:DataGridTemplateColumn>

    Si quelqu'un peut m'éclairer, ça serait sympa

  2. #2
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut
    J'ai trouvé un début de solution, mais j'arrive à accéder qu'à la première textbox...
    J'ai utiliser ce code :
    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
     
     public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
    {
       for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
       {
           DependencyObject child = VisualTreeHelper.GetChild(obj, i);
           if (child != null && child is childItem)
                       return (childItem)child;
           else
           {
              childItem childOfChild = FindVisualChild<childItem>(child);
              if (childOfChild != null)
                       return childOfChild;
            }
        }
                return null;
     }

    Et dans mon autre méthode je l'ai appelé de cette manière :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void OnIncludeVariableInTranslationText(DocGen.ViewModel.TranslationViewModel.IncludeVariableInTranslationText includeVariableInTranslationText)
    {
          TextBox tb = FindVisualChild<TextBox>(dataGrid1);
           tb.SelectedText = includeVariableInTranslationText.Variable; 
            if (includeVariableInTranslationText.TextTranslation != null)
            {
                    includeVariableInTranslationText.TextTranslation.Translated = tb.Text;
             }   
    }

    Je veux en fait récupérer la TextBox dans laquelle j'ai cliqué...mais je ne pense pas que ce soit possible...enfin en tout cas je ne vois pas comment faire.

  3. #3
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut
    Solution trouvée après plusieurs jours...
    Pour récupérer le TextBox dans lequel j'ai cliqué il fallait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox currentTextBox = dataGrid1.GetVisualDescendants().OfType<TextBox>().ElementAt<TextBox>(dataGrid1.SelectedIndex);
    Si ça peut en aider certains ou certaines par la suite

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Ca fonctionne toujours s'il y a 2 textBox par datatemplate?
    Si je comprend bien tu utilises l'index en estimant que l'index du selectedItem correspond à l'index de la textbox. La ca fonctionne car il n'y a qu'une textbox par celulle et on peut donc supposer que l'increment se fait en même temps. Mais ca me semble pas forcement obligatoire .

  5. #5
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut
    Oui dans mon cas ça fonctionne car je n'ai qu'une TextBox par ligne, et j'en aurais toujours qu'une. Si il y en a plusieurs...ça complique un peu les choses

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

Discussions similaires

  1. Accéder à une adresse contenu dans une adresse
    Par Qooort dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 22/06/2013, 00h33
  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. Comment accéder aux données d'une Map contenue dans une autre Map
    Par leeti dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 27/05/2011, 23h35
  4. Réponses: 1
    Dernier message: 27/02/2010, 13h28
  5. accéder au javascript contenu dans une dll
    Par Gibou dans le forum Débuter
    Réponses: 0
    Dernier message: 26/08/2009, 00h31

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