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 :

Contrôle utilisateur : conteneur


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut Contrôle utilisateur : conteneur
    Je souhaite créer mon propre contrôle utilisateur qui est une Grid avec un format spécifique.

    Pour ce faire j'ai créé un UserControl sous la forme d'une grille et le tout est contenu dans une librairie Silverlight.

    J'utilise cette librairie et donc ce contrôle dans une application et je voulais savoir comment je pouvais me donner la possibilité de rajouter des élements dans la grille.

    Par défaut, avec la Grid classique on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Button Grid.Row="0">
            <TextBox Grid.Row="1">
    </Grid>
    Dans cet exemple, on a créé une grille de deux lignes, avec un bouton dans la première ligne et un champ texte dans la deuxième.

    Ayant créé le composant MyGrid, j'aimerai pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <MyGrid x:Name="LayoutRoot" Background="White">
            <Button Grid.Row="0">
            <TextBox Grid.Row="1">
    </MyGrid >
    Je n'ai pas besoin de définir le nombre de ligne puisque cela est définit dans le composant.

    Comment puis je ajouter différent contrôle (button, textbox) à mon composant?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Si ton controle MyGrid hérite de Grid, alors cela se fait automatiquement...

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Quand on veut créer un contrôle, bah il faut créer un contrôle et non pas un UserControl...

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    OK.

    J'ai créer la classe MyGrid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class MyGrid : Grid
    dont le code xaml est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Grid x:Class="MyComponents.MyGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
    </Grid>
    Maintenant je peux dans mon application, faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <my:MyGrid>
            <Button Grid.Row="1"></Button>
    </my:MyGrid>
    Je me suis fais pieger car je créais mon composant à partir de l'interface de MVS : Add->New Item...->Silverlight User Control.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    Imaginons que je nomme les cellules de ma grille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Grid x:Class="MyComponents.MyGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition x:Name="topField"></RowDefinition>
            <RowDefinition x:Name="middleField"></></RowDefinition>
            <RowDefinition x:Name="bottomField"></></RowDefinition>
        </Grid.RowDefinitions>
    </Grid>
    Comment placer des contrôles sur cette grille à partir des noms donnés? Par exemple, j'aimerai pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <my:MyGrid>
            <Button Grid.Row="topField"></Button>
    </my:MyGrid>
    Une idée?

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu peux pas, Grid.Row veut un nombre.

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    Comment créer une propriété d'accès aux cellules d'une grilles?

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <my:MyGrid>
            <Button MyGrid.Cell="topField"></Button>
    </my:MyGrid>
    Que dois-je faire pour ajouter la propriété Cell à mon contrôle MyGrid?

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    Je suis en train de trouver la réponse à ma question mais pas totalement. Je m'explique :

    J'ai créé une propriété attachée LocationProperty

    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
    public partial class MyGrid : Grid
    {
    
    public enum Field
    {
                Top,
                Left,
                Right,
                Bottom,
                Main
     }
    
    public static readonly DependencyProperty LocationProperty;
    
    static MyGrid()
    {
                PropertyMetadata locationMetaData = new PropertyMetadata(Field.Main);
                LocationProperty = DependencyProperty.RegisterAttache ("Location", typeof(Field), typeof(MyGrid), locationMetaData);
    }
    
    public static Field GetLocation(DependencyObject target)
    {
                return (Field)target.GetValue(LocationProperty);
    }
    
    public static void SetLocation(DependencyObject target, Field value)
    {
                target.SetValue(LocationProperty, value);
    }
    
    }
    Cela me permet de spécifier la propriété Location quand j'utilise le composant MyGrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <my:MyGrid>
            <Button my:MyGrid.Location="Top"></Button>
    </my:MyGrid>
    Par contre, je ne sais pas où je dois spécifier à quoi correspond la Location="Top". Dans ce cas, je voudrais que Location="Top" soit équivalent à Grid.Row="0".

    Dois-je agir au niveau du constructeur ou plutot creer une méthode qui se lance au changement de la propriété Location?

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

Discussions similaires

  1. Contrôles utilisateur et editeur visuel Delphi
    Par All Jinx dans le forum Delphi
    Réponses: 4
    Dernier message: 06/10/2006, 18h04
  2. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  3. Réponses: 2
    Dernier message: 20/04/2006, 14h05
  4. [C#][VS2005]Contrôle utilisateur et saisie TextBox
    Par caelum dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/04/2006, 21h24

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