+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    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 :
    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

  2. #2
    Invité régulier
    Inscrit en
    avril 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 32
    Points : 8
    Points
    8

    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
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    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.

  4. #4
    Invité régulier
    Inscrit en
    avril 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 32
    Points : 8
    Points
    8

    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
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    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).

  6. #6
    Membre Expert
    Profil pro mebarek
    Inscrit en
    avril 2008
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Nom : mebarek
    Âge : 54

    Informations forums :
    Inscription : avril 2008
    Messages : 1 329
    Points : 2 227
    Points
    2 227

    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 :
    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 :
    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 :
    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 :
    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
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    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.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •