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 :

Silverlight 2 : Créer un contrôle surchargeable


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Par défaut Silverlight 2 : Créer un contrôle surchargeable
    Bonjour,

    Tout d'abord, je débute en silverlight et j'ai un peu de mal à trouver mes repères.
    Je dois créer un contrôle silverlight qui serait facilement surchargeable. Je m'explique, l'utilisateur implementant ce contrôles dans sont page.xaml devrait pouvoir modifier les attributs de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Local:SlideView Name="SlideCtrl" Background="Aqua" />
    Et dans ce cas la couleur d'arrière plan serait changer par celle spécifié.

    Voici le code de mon contrôle :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <UserControl x:Class="SilverlightApp.SlideView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 Width="300" Height="auto"
                 HorizontalAlignment="Right">
     
        <Canvas Width="300" Height="auto"
                    RenderTransformOrigin="0.5,0.5" 
                    x:Name="SlidePanel"
                    HorizontalAlignment="Right"
                    Opacity="0"> 
     
            <Canvas.Resources> 
                <Storyboard x:Name="SlideExpand">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SlidePanel" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="300"/>
                        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
     
                <Storyboard x:Name="SlideCollapse">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SlidePanel" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="300"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </Canvas.Resources>
     
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                        <SkewTransform AngleX="0" AngleY="0"/>
                        <RotateTransform Angle="0"/>
                        <TranslateTransform X="0" Y="0"/>
                    </TransformGroup>
                </Canvas.RenderTransform>
     
            </Canvas>
     
    </UserControl>
    J'ai lu sur le net que beaucoup faisait cela en surchargeant la méthode onApplyTemplate() et en utilisant un fichier de "ressourceDictionnary" (generic.xaml), mais je souhaiterais éviter de devoir passer par le code behind pour modifier les valeurs des Attributs.

    Si quelqu'un pouvait m'aider ou même m'aiguiller j'en serais ravi.

    Merci

  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
    Il te suffit, sur ton controle SlideView, d'exposer des propriétés qui vont modifier les propriétés de l'IHM de ton contrôle (comme on le faisait en Winforms / Webforms)

  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
    A noter que si tu souahites donner des possibilités de binding à tes propriétés il faut passer par des Dependency Properties.

    Dans tous les cas tu dois passer par du code behind.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Par défaut
    Merci de vos réponses mais n'est il pas possible de faire comme en win et webforms ou on spécifie des valeurs pour le background et quand on linstancie ou peut en définir une autre pour cette instance ?

    Car moi quoi qu'il se passe il garde la valeur définie dans mon xaml du contrôle

  5. #5
    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
    Citation Envoyé par Spaeda Voir le message
    Merci de vos réponses mais n'est il pas possible de faire comme en win et webforms ou on spécifie des valeurs pour le background et quand on linstancie ou peut en définir une autre pour cette instance ?

    Car moi quoi qu'il se passe il garde la valeur définie dans mon xaml du contrôle
    Si c'est ce qu'on te dit.

    Tu créés une propriétés dans ton code behind que tu appelels Color par exemple et dans le setter tu modifies la couleur de l'objet que tu veux.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Par défaut
    Désolé,

    J'ai due mal m'exprimer, mais en fait en asp.NET quand on met un WebControl dans une page asp on peut changer, toujours via cette page, les propriétés graphique de l'objet comme le background, la police etc et cela sans passer par le code behind.

    Et en silverlight, j'ai beau vouloir faire pareil, il ne conserve que les propriétés définie dans le fichier xaml du composant.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <UserControl x:Class="SilverlightApp.SlideView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 Width="300" Height="auto"
                 HorizontalAlignment="Right">
    </UserControl>
    lorsque je le met dans mon page.xaml, je devrais pouvoir changer les propriétés Width et Height sans passer par le code behind.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Local:SlideView Name="SlideCtrl" />
    Dans ce cas mon usercontrol aura une largeur de 300 comme définie dans le xaml du contrôle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Local:SlideView Name="SlideCtrl" Width="800"/>
    Et dans ce cas ci mon usercontrole aura une largeur de 800, la valeur vient écraser celle definie dans le xaml du contrôle.

    J'espère avoir été assez clair, cela peut paraitre con car c'est logique mais j'ai beau essayer et ya rien a faire il ignore totalement les valeur définie lors de sa déclaration dans mon page.xaml. Donc ya t'il une subtilité qui m'aurait échappé ?

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

Discussions similaires

  1. Créer un contrôle utilisateur de type "openFileDialog"
    Par pavicf dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2007, 11h05
  2. Créer des contrôles en runtime
    Par cryborg dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 23/01/2007, 15h32
  3. [VBA Excel] Créer plusieurs contrôles dynamiquement
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/12/2005, 17h27
  4. [API Windows] Créer un contrôle image
    Par Zazeglu dans le forum Windows
    Réponses: 14
    Dernier message: 03/02/2004, 22h42

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