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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    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 : 43
    Localisation : France

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

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    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,

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    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 émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Oui, tu peux prendre l'extrait de code que je t'ai fournit et qui fonctionne sans converter

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 Invité 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