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 :

Tag XAML pour une DependencyProperty d'un CustomUserControl


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut Tag XAML pour une DependencyProperty d'un CustomUserControl
    Bonjour,

    Dans le cadre de mon application, je souhaite avoir une classe dérivant de UserControl qui intègre une propriété. Cette propriété est un conteneur. On peut considérer pour l'exemple que ca sera un Stackpanel.

    Au final j'aurai donc une classe qui ressemble à cela:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public CustomUserControl:UserControl
    {
        public StackPanel MyStackPanel
        {
            get { return (StackPanel)GetValue(MyStackPanelProperty); }
            set { SetValue(MyStackPanelProperty, value); }
        }
     
        public static readonly DependencyProperty MyStackPanelProperty =
            DependencyProperty.Register("MyStackPanel", typeof(StackPanel), typeof(CustomUserControl), new UIPropertyMetadata(null));
    }

    Ce que je veux pouvoir faire par la suite, c'est créer des CustomUserControl dans lesquels je pourrai ajouter des contrôles graphiques à l'intérieur du StackPanel.
    Pour cela, il faudrait que je puisse écrire ce genre de code XAML

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <myns:CustomUserControl x:Class="MyApplication.MyView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:myns="clr-namespace=MyApplication">
     
    <myns:CustomUserControl.MyStackPanel>
            <Button Content="C'est" />
            <Button Content="Trop" />
            <Button Content="Cool !" />
        </myns:CustomUserControl.MyStackPanel>
     
    </myns:CustomUserControl>

    Comment pourrais-je faire pour obtenir le tag que j'ai mis en gras dans le code XAML ?

    Merci beaucoup pour les éléments de réponse que vous saurez me donner.
    Laurent

  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 : 43
    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
    Citation Envoyé par marcusien Voir le message
    Comment pourrais-je faire pour obtenir le tag que j'ai mis en gras dans le code XAML ?
    Il n'y a rien de spécial à faire, le fait d'avoir déclaré la DependencyProperty te permet déjà utiliser ce tag. Par contre ça ne s'utilisera pas exactement comme dans le code que tu as posté, mais comme ça :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <myns:CustomUserControl.MyStackPanel>
            <StackPanel>
                <Button Content="C'est" />
                <Button Content="Trop" />
                <Button Content="Cool !" />
            </StackPanel>
        </myns:CustomUserControl.MyStackPanel>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Merci beaucoup Thomas,

    J'ai mis un peu de temps à répondre car du coup j'étais sur autre chose. Ca marche bien, il faut bien voir qu'on travaille après sur l'instance créée par le code XAML et que par conséquent, il ne faut pas instancier le LayoutControl dans son code C#.

    Du coup au final ca me donne quelque chose du genre

    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
     
    public class UserControlDetailViewLayoutControl : UserControlDetailView
    {
     
        public LayoutControl LayoutControl
        {
            get { return (LayoutControl)GetValue(LayoutControlProperty); }
            set { SetValue(LayoutControlProperty, value); }
        }
     
        public static readonly DependencyProperty LayoutControlProperty =
            DependencyProperty.Register("LayoutControl", typeof(LayoutControl), typeof(UserControlDetailViewLayoutControl), new UIPropertyMetadata(null));
     
        public UserControlDetailViewLayoutControl()
        {
            this.Loaded += UserControlDetailViewLayoutControl_Loaded;
        }
     
        void UserControlDetailViewLayoutControl_Loaded(object sender, RoutedEventArgs e)
        {
            this.AddChild(LayoutControl);
            this.Loaded -= UserControlDetailViewLayoutControl_Loaded;
        }
    }

    Et le code XAML correspondant :

    Code XAML : 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
     
    <uidx:UserControlDetailViewLayoutControl x:Class="MyProject.DetailView"
                                               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                                               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                               xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"
                                               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                                               xmlns:uidx="clr-namespace:MyProject.Common.UI.Dx;assembly=MyProject.Common.UI.Dx">
     
        <uidx:UserControlDetailViewLayoutControl.LayoutControl>
            <dxlc:LayoutControl Orientation="Vertical">
                <dxlc:LayoutItem Label="Nom complet">
                    <TextBox Text="{Binding CurrentItem.FullName}" />
                </dxlc:LayoutItem>
        </uidx:UserControlDetailViewLayoutControl.LayoutControl>
     
    </uidx:UserControlDetailViewLayoutControl>

    Si ca peut en aider d'autres.

    Laurent

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

Discussions similaires

  1. [XAML] plusieurs filtres pour une image
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 16/11/2010, 12h24
  2. Pour une meilleure exploitation du "tag"
    Par Just-Soft dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2009, 20h53
  3. Style dans le Generic.xaml pour un CustomControl d'une bibliothéque de classe
    Par olsimare dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 21/06/2008, 22h35
  4. Réponses: 2
    Dernier message: 05/03/2008, 19h30
  5. [RegEx] Problème pour enlever les tags javascript d'une source HTML
    Par Easyweb dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2006, 02h10

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