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

C# Discussion :

XAML : Héritage ou réutilisation


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 66
    Points
    66
    Par défaut XAML : Héritage ou réutilisation
    Bonjour,

    est-t-il possible de faire de l'héritage en XAML (WPF)?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <local:Window1 x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
     
        </Grid>
    </local:Window1>
    Avec Window1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Window x:Class="WpfApplication1.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="92,122,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        </Grid>
    </Window>
    De nombreux sujets disent que ce n'est pas possible, mais d'autres disent le contraire :
    http://www.developpez.net/forums/d74...e-classe-xaml/

    Autre question :

    Peut-on réutiliser un objet XAML dans un autre objet XAML?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <Window1 />
        </Grid>
    </Window>
    Avec Window1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Window x:Class="WpfApplication1.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="92,122,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        </Grid>
    </Window>

    Évidement, ces exemples ne fonctionnent pas

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Points : 963
    Points
    963
    Par défaut
    Alors pour ton premier cas je ne saisi pas entièrement ce que tu souhaites faire.

    Mais à mon avis, ce que tu cherches à faire est largement possible mais pas par héritage.

    Il te faut un UC du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <uc x:class="......MonUc">
     
    <grid>
     
    <contentControl content={Binding SousUC}/>
     
    <button ..../>
     
    </grid>
     
    </uc>
    dans le code behind tu ajoutes une dependency property de type user control (disons que le nom de la DP est SousUC).

    Puis dans un autre fichier usercontrol, tu importes le namespace :
    (qui te montre comment faire pour ton cas numéro 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <userControl xmlns:local="chemin de la dll où se trouve le premier UC">
     
    <grid>
    <local:MonUC sousUc={Binding unAutreUC}/>
    </grid>
    </uc>
    Si tu n'utilises pas le binding, tu ajoutes un x:Name et tu l'affectes via codebehind.

    Tu peux aussi créer un UC avec templatebinding & co mais c'est plus compliqué.

    En espérant t'avoir donné des pistes.
    "S'adapter, c'est vaincre" - Cellendhyll de Cortavar

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 66
    Points
    66
    Par défaut
    dans le code behind tu ajoutes une dependency property de type user control (disons que le nom de la DP est SousUC).
    Pas compris

    Donc en XAML, l'héritage n'existe pas. Mais on peut étendre des objets XAML grâce à un système d'extension.

    Est-on obligé d'utiliser les UserControls pour utiliser le système d'extension XAML?



    J'avais un autre question qui est toujours sans réponse :
    Peut-on réutiliser un objet XAML dans un autre objet XAML?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 66
    Points
    66
    Par défaut
    Peut-on réutiliser un objet XAML dans un autre objet XAML?

    J'oubliais de spécifier l'espace de nom de mon application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:App=""clr-namespace:WpfApplicationMaquette1"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <App:Window1 />
        </Grid>
    </Window>
    Par contre il est stupide de mettre une fenêtre dans une fenêtre.

    Est-on obligé d'utiliser les UserControls pour utiliser le système d'extension XAML?

    Erreur de build inconnue, 'MC6017*: 'WpfApplication1.Window1' ne peut pas être la racine d'un fichier XAML, car sa définition a été faite à l'aide de XAML.
    En gros, on peut hériter des classes non déclarer en XAML. Certains tricks utilisent des classes intermédiaires en dur, mais je pense qu'il vaut mieux adapter l'architecture du programme à cette problématique.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Points : 963
    Points
    963
    Par défaut
    Erreur de build inconnue, 'MC6017*: 'WpfApplication1.Window1' ne peut pas être la racine d'un fichier XAML, car sa définition a été faite à l'aide de XAML.

    Je pense que tu as du modifier la racine du xaml mais a oublié de modifier le code behind :

    Public Class monCtrl : Window -> Window1 si ton xaml commence avec <window1 x:class = "monCtrl" ...>



    Peut-on réutiliser un objet XAML dans un autre objet XAML?
    J'oubliais de spécifier l'espace de nom de mon application

    -> c'est ce que je t'avasi écris avec le coup du xmlns:local="path assembly" puis <local:MonCtrl>


    Est-on obligé d'utiliser les UserControls pour utiliser le système d'extension XAML?

    Non mais il faut bien former le xaml et code behind. Je l'ai déjà fait :

    Admettons que tu veux que ton control soit à la base un control bis par exemple utiliser un control telerik (composant tiers) à la place de ton window.

    Tu feras :
    <telerik:RadWindow x:Class="MesControles.RW_UnPopup" ...> et code behind
    Public Class RW_UnPopup : RadWindow
    "S'adapter, c'est vaincre" - Cellendhyll de Cortavar

Discussions similaires

  1. Héritage de classe XAML
    Par cyberbobby dans le forum Silverlight
    Réponses: 4
    Dernier message: 15/12/2010, 10h17
  2. Héritage de classes en XAML
    Par Nisnor dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 13/09/2010, 11h17
  3. [XAML] Héritage de controle
    Par anthyme dans le forum Silverlight
    Réponses: 8
    Dernier message: 07/05/2008, 15h06
  4. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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