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 :

WPF - C# Binding proportionnel à une autre élément.


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut WPF - C# Binding proportionnel à une autre élément.
    Bonjour,

    J'ai un UserControl contenant une Image.

    J'aimerai que la largeur de mon image soit automatiquement redimensionné à 75% de la largeur de mon UserControl.

    Avec un Binding via Blend, je n'arrive qu'a utiliser la même taille, mais pas à appliquer de raisonnement mathématique à un element de référence...

    Un peu d'aide ?

  2. #2
    Membre très actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Par défaut
    Bonjour,
    ce que je ferai à ta place, c'est de mettre une grid à 100% avec 2 colonnes (75% et 25%). Et je mettrai l'image à 100% dans la 1ere colonne.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    C'est une idée, mais mon exemple se voulait simpliste pour bien comprendre le fonctionnement que je cherche.

    Mais dans mon vrai programme, j'ai plusieurs éléments à "binder" sur une proportion, c'est assez variable et difficilement jouable avec simplement quelques astuces graphique.

    Ce que j'aimerai c'est un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Width="{Binding ActualWidth * .75, ElementName=UserControl  , Mode=Default}"
    Mais évidement, ca ne fonctionne pas aussi simplement...

    Je pensais alors à Binder sur une Variable C# qui elle même serait fonction de la taille de mon UC. Mais je ne sais pas comment faire...

    Je vais peut être essayé de poser ce même poste dans la partie C# du forum, si un modérateur veut bien déplacer le poste...

  4. #4
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Bonjour,

    Je pense qu'il te faut un convertisseur ici. Tu lui passes la taille, un paramètre qui donne la proportion que tu veux, et il te retourne la bonne valeur.
    Dès que tu as une opération à réaliser sur une valeur dans un binding, il te faut un convertisseur.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Effectivement, c'est ce qu'il me semble avoir lu... Je vais y jeter un oeil...

    [bataille de modification de message ;-) ]

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Tu peux utiliser un converter pour ton binding :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    Width="{Binding ElementName=nomUserControl, Path=ActualWidth, Converter={StaticResource WidthConverter}}"

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      public class WidthConverter : IValueConverter {
        public object Convert(object o, Type type, object parameter,
                              System.Globalization.CultureInfo culture) {
           return ((double)o * 0.75);
        }
     
        public object ConvertBack(object o, Type type, object parameter,
                                  System.Globalization.CultureInfo culture) {
          throw new NotSupportedException();
        }
      }

    Apres, tu peux aussi donner ton ratio au converter en utilisant du multiBinding.

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

Discussions similaires

  1. Variation inverse d'une variable proportionnellement à une autre
    Par TheDrev dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/04/2010, 08h47
  2. Réponses: 5
    Dernier message: 30/01/2008, 09h18
  3. Bind variable incluse dans une autre bind variable
    Par kinder_pingui dans le forum SQL
    Réponses: 3
    Dernier message: 28/11/2006, 10h35
  4. Basuler un élément d'une liste vers une autre liste
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 13/04/2006, 22h55
  5. pointer sur un autre élément d'une liste en codage
    Par rahan_dave dans le forum Access
    Réponses: 3
    Dernier message: 03/02/2006, 13h25

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