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 :

Comment combiner DynamicResource et StringFormat?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut Comment combiner DynamicResource et StringFormat?
    Bonjour,

    Je rencontre plusieurs questions avec l'utilisation des DynamicResource.
    J'ai une application que je voudrai rendre multilangue. J'(ai donc deux fichier deux ressources avec les clés/valeurs de mon texte.
    Par exemple:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
        <system:String x:Key="Culture">fr-FR</system:String>
    	<system:String x:Key="Welcome">Bienvenue</system:String>
    	<system:String x:Key="Test">Ceci est un test</system:String>
    </ResourceDictionary>
     
    <TextBlox Text="{DynamicResource ResourceKey=Test}" />

    Pour cet exemple pas de problème.
    La où ça se complique c'est quand j'ai un StringFormat.
    Par exemple:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <TextBlock>
    	<TextBlock.Text>                            
    		 <MultiBinding StringFormat= "Bienvenue {0} {1} ">
    			 <Binding Path="UserConnected.Lastname" RelativeSource="{RelativeSource AncestorType=Window}" Mode="OneWay" FallbackValue="" />
    			 <Binding Path="UserConnected.Firstname" RelativeSource="{RelativeSource AncestorType=Window}" Mode="OneWay" FallbackValue="" />
    		 </MultiBinding>
    	</TextBlock.Text>
    </TextBlock>

    Comment faire pour remplacer le "Bienvenue" par ma ressource?
    J'ai essayé ceci mais sans succés.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    <MultiBinding StringFormat= "{}{DynamicResource ResourceKey=Welcome} {0} {1} ">
    ...

    Quelqu'un a t'il une idée svp?
    Par avance 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 : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    A part créer ta propre MarkupExtension, là je ne vois pas d'autres idées....

  3. #3
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    A part créer ta propre MarkupExtension, là je ne vois pas d'autres idées....
    Je plussoie. Voici la markupExtension en question:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class CustomMarkup : MarkupExtension
    {
        public string ResourceKey { get; set; }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return App.Current.Resources[ResourceKey];
     
        }
    }

    L'utilisation dans le XAML:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <TextBlock.Text>                            
    	 <MultiBinding StringFormat="{local:CustomMarkup ResourceKey=Text}">
           			 <Binding Path="UserConnected.Lastname" Mode="OneWay" FallbackValue=""
                            RelativeSource="{RelativeSource AncestorType=Window}" />
    		 <Binding Path="UserConnected.Firstname" Mode="OneWay" FallbackValue=""
                            RelativeSource="{RelativeSource AncestorType=Window}" />
    	 </MultiBinding>
    </TextBlock.Text>

    Par contre il faut mettre les traductions dans les ressources de l'application.

    Bon courage,
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup pour cette piste. Je vais découvrir les MarkupExtension.

    Pour les traductions, pas de soucis. Elles sont dans un ResourceDictionary qui fait parti des ressources de mon application.

    J'obtiens:
    Cannot set MultiBinding because MultiValueConverter must be specified. c:\Users\.....\MainWindows.xaml
    Ce qui dans le fond me parait normal puisque le TextBlox se retrouve avec 3 valeurs sans savoir comment les associer. Je voudrais éviter de passer par un converter. Y a t'il une solution sur le principe du StringFormat?

    Encore merci

  5. #5
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Oui, tu peux prendre l'extrait de code que je t'ai fournit et qui fonctionne sans converter
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

Discussions similaires

  1. Comment combiner un QDockWidget et un MainWindow
    Par SIGMA-Mike dans le forum Qt
    Réponses: 4
    Dernier message: 11/01/2014, 20h49
  2. [ADO.Net][C#] Comment combiner IDbCommand et procédures stockées ?
    Par L`artiste dans le forum Accès aux données
    Réponses: 7
    Dernier message: 19/08/2011, 16h44
  3. Comment combiner deux classifieurs ?
    Par telecom85 dans le forum Méthodes prédictives
    Réponses: 8
    Dernier message: 04/02/2010, 23h40
  4. comment combiner deux images avec WIA
    Par blondelle dans le forum C++Builder
    Réponses: 0
    Dernier message: 22/05/2009, 14h33

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