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 :

DynamicResource Multifenêtre


Sujet :

Windows Presentation Foundation

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut DynamicResource Multifenêtre
    Bonjour tout le monde,

    je suis en train d'apprendre les ressources en WPF, et plus particulièrement les DynamicResources (qui à mon avis possède un fort potentiel).

    J'ai donc un dictionnaire de ressources, que j'applique à mes fenêtres grâce à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Window.Resources>
            <ResourceDictionary Source="Dictionary1.xaml"/>
    </Window.Resources>
    Dans chacune de mes fenêtres, j'utilise une ressource de ce dictionnaire (la même pour toutes les fenêtres). Chacune de mes fenêtres me donne la possibilité de modifier cette ressource.

    Néanmoins, lorsque je modifie cette ressource à partir d'une fenêtre, le changement n'est pris en compte que dans celle-ci, et pas dans les autres...

    Comment faire que pour si une fenêtre modifie la ressource, toutes les autres se mettent à jour ?

    Merci pour votre aide
    Finality

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    euh... on ne peut pas modifier une ressource (enfin, pas à l'exécution)
    ou alors j'ai pas compris ce que tu voulais faire

    Sinon, pour pouvoir ajouter des ressources en plus du ResourceDictionary dans chaque fenêtre, il vaudrait mieux que tu fasses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Window.Resources>
            <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
              </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
     
            <!-- les autres resources -->
            <DataTemplate x:Key="toto"...>
             ...
    </Window.Resources>
    Ou encore plus simple : tu définis les ressources communes au niveau de l'application, dans App.xaml

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Bah en fait voilà l'idée que je veux faire :

    dans chacune des fenêtres j'ai un contrôle Image qui affiche une image par défault. Néanmoins, si cette image est changée par l'utilisateur, toutes les fenêtres doivent prendre en compte ce changement.

    Pour cela je créé une ressource BitmapImage, et chaque contrôle Image l'affiche. J'ai donc pensé à utiliser cette ressource en mode dynamic, afin que je n'ai qu'à la modifier pour que toutes les fenêtres se mettent à jour. Et c'est là où ça marche pas

    Pour ce qui est de changer une ressources en cours d'utilisation, on peut (et ça marche). Voilà le code que j'utilise (ne tenez pas compte de la non-optimisation ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As BitmapImage = FindResource("profil")
    T = New BitmapImage(New Uri("C:\Users\Kevin\Pictures\tux\congelatux.png"))
    Me.Resources.Item("profil") = T
    Ais-je mieux expliqué mon problème ou pas ?
    Merci pour votre aide
    Finality

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Finality Voir le message
    Pour ce qui est de changer une ressources en cours d'utilisation, on peut (et ça marche). Voilà le code que j'utilise (ne tenez pas compte de la non-optimisation ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As BitmapImage = FindResource("profil")
    T = New BitmapImage(New Uri("C:\Users\Kevin\Pictures\tux\congelatux.png"))
    Me.Resources.Item("profil") = T

    hum... j'ai encore parlé trop vite

    Dans ce cas, je pense que le fait de mettre les ressources au niveau de l'application devrait régler le problème. Quand tu inclues un même ResourceDictionary dans plusieurs fenêtres, je crois qu'il te crée plusieurs instances de ResourceDictionary, or pour toi il faut que ce soit toujours la même

  5. #5
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Bah justement c'est ce que je me suis dit mais ça ne marche pas non plus .
    VOilà le code dans Application.xaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Application.Resources>
            <BitmapImage x:Key="profil" UriSource="C:\Users\Kevin\Pictures\tux\barbarux.png" ></BitmapImage>
    </Application.Resources>
    là, c'est le code qui permet de créer mes contrôles Image sur mes formulaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Image Name="Image2"Source="{DynamicResource profil}" />
    et ça c'est le code que j'utilise au sein d'un formulaire pour modifier ma ressource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As BitmapImage = FindResource("profil")
    T = New BitmapImage(New Uri("C:\Users\Kevin\Pictures\tux\congelatux.png"))
    Me.Resources.Item("profil") = T
    Est-ce que l'erreur ne peut pas venir du fait que j'utilise le Me pour changer ma Ressource ?

    Merci encore et toujours pour votre aide
    Finality

  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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Essaie avec :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Current.Resources.Item...

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Finality Voir le message
    Est-ce que l'erreur ne peut pas venir du fait que j'utilise le Me pour changer ma Ressource ?
    Si
    cf. la réponse de binoo

  8. #8
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Re tout le monde,

    donc j'ai essayé et ça marche à la perfection . DOnc j'avais bien compris le truc de Me ^^

    Par contre petite question : j'aimerai faire la même chose avec une String. Or cela n'est pas possible de déclarer une ressource String.

    Je dois donc utilise le "bindage" c'est ça ?

    Merci beaucoup pour votre aide, vous êtes géniaux
    Finality

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Finality Voir le message
    Par contre petite question : j'aimerai faire la même chose avec une String. Or cela n'est pas possible de déclarer une ressource String.
    Si, bien sûr que tu peux !
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <sys:String x:Key="toto"></sys:String>
    En déclarant le namespace sys de la façon suivante :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:sys="clr-namespace:System;assembly=mscorlib"

Discussions similaires

  1. LinearGradientBrush + DynamicResource - CodeBehind
    Par Finality dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 22/06/2009, 11h00
  2. Récupérer une propriété d'un control dans une DynamicResource
    Par Eggiz dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 04/05/2009, 14h48
  3. [DynamicResource] Comment l'affecter côté code-behind C# ?
    Par despeludo dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/09/2008, 13h41
  4. Problème d'affichage en mode multifenêtre
    Par popov2 dans le forum WinDev
    Réponses: 1
    Dernier message: 30/04/2007, 19h23
  5. Réponses: 2
    Dernier message: 28/11/2005, 13h20

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