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 :

UserControl, Propriété et Trigger


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut UserControl, Propriété et Trigger
    Bonjour,

    je voudrais créer un UserControl avec un état : Normal ou Réduit que je représenterai par un boolean.
    Quand le composant est "réduit", j'ai un certain nombre de TextBlock que je collapse.

    Voilà le code de ma classe :

    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
    public partial class MyControl : UserControl
    {
        public MyControl()
        {
            this.InitializeComponent();
        }
     
        public Boolean Mini
        {
            get { return (Boolean)this.GetValue(MiniProperty); }
            set { this.SetValue(MiniProperty, value); }
        }
        public static readonly DependencyProperty MiniProperty = 
            DependencyProperty.Register("Mini", typeof(Boolean), typeof(MyControl), new PropertyMetadata(false));
    }

    Et voilà l'XAML correspondant :

    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
    15
    16
    17
    <UserControl
        ...
        x:Class="MyNameSpace.MyControl">
     
        <UserControl.Resources>
            <Style TargetType="TextBlock" x:Key="collapsedMini">
                <Style.Triggers>
                    <Trigger Property="MyControl.Mini" Value="True">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </UserControl.Resources>
        ...
        <TextBlock Style="{StaticResource collapsedMini}">...</TextBlock>
        ...
    </UserControl>

    Et je souhaiterais invoquer mon composant de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <MyControl />
    ou
    <MyControl Mini="True" />
    Le style fonctionne si je change la valeur par défaut dans le new PropertyMetadata().
    En revanche, le trigger n'a pas l'air de fonctionner : que je mette Mini="True" ou non, le composant reste à l'état normal...

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    Je n'ai jamais utiliser de triggers en XAML donc la solution n'est peut-être pas bonne enfin faut tester pour voir.

    ma solution est donc la suivante:
    Si tu ajoutai un second trigger pour le second effet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    <Trigger Property="MyControl.Mini" Value="False">
                        <Setter Property="Visibility" Value="Visible"/>
                    </Trigger>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sephirostoy Voir le message
    Le style fonctionne si je change la valeur par défaut dans le new PropertyMetadata().
    En revanche, le trigger n'a pas l'air de fonctionner : que je mette Mini="True" ou non, le composant reste à l'état normal...
    Bizarre quand même que cela ne marche pas.
    Essaies avec un Nullable<bool> et mettre la valeur par défaut à null.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut
    Ni l'une ni l'autre des 2 méthodes n'a résolu le problème.

    J'ai résolu mon problème en modifiant légèrement la structure de mon UserControl :
    - Tout le contenu de mon UserControl est encapsulé dans un ControlTemplate
    - Tous mes triggers sont passé de <Style.Triggers> à <ControlTemplate.Triggers>
    - Au lieu de définir un style à mes composants, c'est le trigger qui change la visibilité de mes composants

    Et là, ça marche sans probème. J'ai l'impression que les triggers ne réagissent pas de la même manière face aux évênements suivant s'ils sont dans un Style ou dans un ControlTemplate.

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

Discussions similaires

  1. Valeur non sauvegardé: UserControl Propriété d'une classe
    Par rikidude dans le forum Windows Forms
    Réponses: 0
    Dernier message: 08/12/2009, 22h50
  2. [AJAX] usercontrol, propriétés et javascript
    Par coco-loco dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/01/2009, 10h35
  3. [c#/UserControl] Ajout des nouvelles propriétés
    Par layouni dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/04/2007, 10h02
  4. Réponses: 1
    Dernier message: 10/11/2006, 21h08
  5. Réponses: 2
    Dernier message: 20/04/2006, 14h05

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