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 -Ajouter un thème standard à son application [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut WPF -Ajouter un thème standard à son application
    Bonjour,

    J'ai lu qu'il était possible d'appliquer des thèmes standard style Aero ou autre à une application WPF. J'utilise le FrameWork 4.0. J'ai 2 questions :

    - Existe t'il un thème pour Windows 7 (Aéro était Vista si je me trompe) voir Windows 8 ?
    - Quelqu'un aurait t'il un bout de code fonctionnel ou un tutoriel un minimum complet, car j'ai trouvé bcp de lien traitant du sujet, mais je dois avouer que je suis un peu perdu.

    En test j'ai créé une simple fenêtre comprenant un bouton avec le code suivant mais je ne vois pas de différence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="/PresentationFramework.Classic;component/themes/classic.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>
    Aurais je oublié quelque chose à rajouter dans le code behind peut être.

    Merci pour votre aide
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Salut, tu devrais regarder Expression Blend, ça marche vraiment bien.

    Un aperçu de leur tutos :
    http://www.microsoft.com/expression/...Day.aspx?day=1

  3. #3
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par uluquiorra Voir le message
    Salut, tu devrais regarder Expression Blend, ça marche vraiment bien.

    Un aperçu de leur tutos :
    http://www.microsoft.com/expression/...Day.aspx?day=1
    Bonjour,

    Je connais un peu le concept, mais je travaille avec les outils gratuits vu que c'est une autoformation. La société ou je travaille utilise essentiellement VB6 et Java. Mais ayant développé en .net je n'ai pas envie de perdre mes connaissances dans ce domaine. Si je ne me trompe pas Expression Blend n'a hélas pas de version Express comme visual studio.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Non, en effet la version d'essai se bloque au bout de 60 jours.
    Si tu veux regarder dans le gratuit, y'a des choses comme :

    http://www.equals-forty-two.com/2010.../?show=gallery
    http://blogs.msdn.com/b/davrous/arch...-gratuits.aspx

    qui ont l'air pas mal.

  5. #5
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Merci Merci

    Le deuxième j'ai déjà fait quelques tests. Ce qui m’intéresse surtout c'est de comprendre le fonctionnement. Je n'en suis pas encore au niveau de créer une application complétement fonctionnelle (enfin si je pourrais mais sans utiliser les nouveautés comme le binding ou linq, et je pense que se serait dommage de s'en priver).
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour binou....

    Pour changer un theme pour ton appli (un theme est un fichier systeme -et fait partie du systeme car les users ont d'habitude de relouquer tout par un click dans le panneau de confoguration).....et je dis bien -toute l'appli- en WPF c'est facile.....
    Par ailleurs à ne pas confondre avec un "skin" (propre à une ou plusieurs fenetres ou controles) qui se reduit à un simple dictionary (styles des fenetres ou controles concernes )lui aussi changeable à volonte par l'user d'une appli.....
    Pour se limiter aux themes systemes contenus dans des fichiers .dll du GAC(dossier C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\PresentationFramework.Aero...etc idem pour les autres themes)
    Voici d'abord comment les referencer en xaml ou dans le code:
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     <!--ce qui suit est un explicatif indiquant comment specifier la reference du fichier system  dll theme concerne :-->
            <!--Aero—The default theme for Windows Vista
     
            Source="/
            PresentationFramework.Aero,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            aero.normalcolor.xaml" />-->
     
     
            <!--Luna, Default—The XP theme in the regular blue color mode
     
            Source="/
            PresentationFramework.Luna,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            luna.normalcolor.xaml" />-->
     
            <!--Luna, Metallic—The XP theme with the silver styling
     
            Source="/
            PresentationFramework.Luna,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            luna.metallic.xaml" />-->
     
            <!--Luna, Homestead—The green XP theme
     
            Source="/
            PresentationFramework.Luna,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            luna.homestead.xaml" />-->
     
        <!--Royale—The theme used by Windows Media Center edition
            Source="/
            PresentationFramework.Royale,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            royale.normalcolor.xaml" />-->
        <!--Windows Classic—The Windows 2000/2003 look
     
            Source="/
            PresentationFramework.Classic,
            Version=3.0.0.0,
            Culture=neutral,
            PublicKeyToken=31bf3856ad364e35
            ;component/themes/
            Classic.xaml" />-->
    chaque fichier est dans un sous/dossier dont le nom est :
    "<version><PublicKeyToken> .
    PublicKeyToken : veut dire Signature à Nom Fort......ou cle de chiffrage de l'assembly dll....

    Venons-en au plus pratique.
    Pour pouvoir changer le theme d'une appli en entier il faut que dans le fichier App.xaml de l'appli :
    - le 1er Merged Dictionary(indice zero dans Collection des Merged Dictionary de l'appli) soit reserve au dico theme ....
    - suivi des les autres Merged Dictionaries de l'appli(resources de styles,de datatemplates et autres controls templates habituels...)....

    Pourquoi le 1er ? Parce que il n' y a moyen dans l'API d'identifier un dico particulier autrement dans cette Collection des Merged Dictionary ....

    C'est ce dico qui est affecte initialement à l'appli et que nous allons changer
    par 3 buttons dans l'exemple :
    -le 1er charge : Aero—The default theme for Windows Vista
    -le 2eme charge : Windows Classic—The Windows 2000/2003 look
    -le 3eme restaure le theme initial(Luna, Default—The XP theme in the regular blue color mode).....
    Pourquoi au niveau appli?Parce que c'est un theme .Au niveau d'une fenetre c'est plutot un skin qu'il faut....
    code xaml du app.xam:
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
     
    <!--fichier app.xaml-->
     
        <Application x:Class="WpfLoadingTheme.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <!--1er merged dico de l'appli (index 0) par defaut-->
                   <!--Luna, Default—The XP theme in the regular blue color mode-->
                    <ResourceDictionary    Source="/
                            PresentationFramework.Luna,
                            Version=3.0.0.0,
                            Culture=neutral,
                            PublicKeyToken=31bf3856ad364e35
                            ;component/themes/luna.normalcolor.xaml"/>
                       <!--eventuels merged  dico de resources etc...propres à l'application
                          simple dico vide de test à creer pour le test-->
                    <ResourceDictionary  Source="MyLocalResources.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>
    code xaml du window:
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <Window x:Class="WpfLoadingTheme.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel  >
            <StackPanel Orientation="Horizontal">
               <Button 
                   Margin="10"
                   Content="Button"/>
                <Label  
                     Margin="10"
                    Content="Label"/>
                <TextBox 
                     Margin="10"
                    Text="textbox "/>
            </StackPanel>
            <StackPanel  
                Orientation="Horizontal">
                <RadioButton 
                     Margin="10"
                    Content="RadioButton"/>
                <CheckBox
                    Margin="10"
                    Content="CheckBox"/>
            </StackPanel>
            <StackPanel 
                 Name="paneltheme">
                <Button 
                    Name="btnAeroVista"
                    Content="AeroVista"
                    Click="btnAeroVista_Click">
                </Button>
                <Button 
                    Name="btnClassic"
                    Content="Classic"
                    Click="btnClassic_Click">
                </Button>
     
                <Button 
                    Name="btnRestorLunaDefault"
                    Content="LunaDefault"
                    Click="btnRestorLunaDefault_Click">
                </Button>
            </StackPanel>
        </StackPanel>
    </Window>
    code behind .cs du window:
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace WpfLoadingTheme
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            object deftheme;
            public MainWindow()
            {
                InitializeComponent();
     
                //sauve theme par default
     
                if (Application.Current.Resources.MergedDictionaries.Count > 0)
                {
                    //sauve theme par default
                    deftheme = Application.Current.Resources.MergedDictionaries[0];
                }
            }
     
     
            /* click to changes the theme for the  all the Application  */
     
            //switch to : Windows Classic—The Windows 2000/2003 look
     
            private void btnClassic_Click(object sender, RoutedEventArgs e)
            {
     
                Uri uriToTheme = new Uri( "/PresentationFramework.Classic,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35 ;component/themes/Classic.xaml",
                     UriKind.Relative);
                object theme = Application.LoadComponent(uriToTheme);
     
                if (Application.Current.Resources.MergedDictionaries.Count > 0)
                {
     
                    //change le merged dico indice 0 (theme)
                    Application.Current.Resources.MergedDictionaries[0] = (ResourceDictionary)theme;
     
                }
     
     
     
            }
     
            //switch to : Aero—The default theme for Windows Vista
            private void btnAeroVista_Click(object sender, RoutedEventArgs e)
            {
                Uri uriToTheme = new Uri("/PresentationFramework.Aero,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml",
                   UriKind.Relative);
                object theme = Application.LoadComponent(uriToTheme);
     
                if (Application.Current.Resources.MergedDictionaries.Count > 0)
                {
                    //change le merged dico indice 0 (theme)
                    Application.Current.Resources.MergedDictionaries[0] = (ResourceDictionary)theme;
     
                }
     
            }
     
            //restore theme courant
            private void btnRestorLunaDefault_Click(object sender, RoutedEventArgs e)
            {
                if (deftheme != null)
                {
                    Application.Current.Resources.MergedDictionaries[0] = (ResourceDictionary)deftheme;
                }
     
            }
     
     
        }
    }
    bon code et bonne soiree........................

  7. #7
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Merci bien cela marche très bien.

    J'ai comparé à ce que j'avais fait et je pense que c'est la notion du merged dico en index 0 qui ne fonctionnait pas.

    J'ai également jeté un coup d'oeil au "skin" mais j'ai vu sur le forum que le plus souvent il fallait passer par le WPF Toolkit, dont le développement me semble un peu au point mort. Donc je suis un peu réticent à l'utiliser pour l'instant pour des raisons de fiabilité. Mais je dois continuer mes tests sur le sujet .

    En tout cas merci bien pour l'explication bien détaillée.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. Ajouter son application au menu 'Partager'
    Par kandohar dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 08/05/2014, 17h18
  2. Ajouter du contenu additionnel dans son application
    Par Simon MARQUIS dans le forum Android
    Réponses: 6
    Dernier message: 20/09/2011, 09h35
  3. Réponses: 9
    Dernier message: 05/12/2007, 11h34
  4. Comment Ajouter une dll a son application web ?
    Par kedare dans le forum ASP.NET
    Réponses: 7
    Dernier message: 08/02/2007, 16h47

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