MahApps est un projet OpenSource qui permet de faire de belles interfaces au style «Metro» avec Wpf



Similar documents
AGENDA WINDOWS PRESENTATION FOUNDATION LEKTION 4. Statusbar Hyperlänkar WebBrowser TabControl Ribbon ListBox Data Template Resource Dictionary Style

Créer une carte. QGIS Tutorials and Tips. Author. Ujaval Gandhi Translations by

POB-JAVA Documentation

wpf5concat Start Microsoft Visual Studio. File New Project WPF Application, Name= wpf5concat OK.

N1 Grid Service Provisioning System 5.0 User s Guide for the Linux Plug-In

Personnalisez votre intérieur avec les revêtements imprimés ALYOS design

Audit de sécurité avec Backtrack 5

State of Maryland Health Insurance Exchange

Solaris 10 Documentation README

Langages Orientés Objet Java

Archived Content. Contenu archivé

Tool & Asset Manager 2.0. User's guide 2015

Liste d'adresses URL

Note concernant votre accord de souscription au service «Trusted Certificate Service» (TCS)

The wolf who wanted to change his color Week 1. Day 0. Day 1. Day 2. Day 3. - Lecture de l album

Altiris Patch Management Solution for Windows 7.6 from Symantec Third-Party Legal Notices

Archived Content. Contenu archivé

Short Form Description / Sommaire: Carrying on a prescribed activity without or contrary to a licence

Altiris Patch Management Solution for Windows 7.5 SP1 from Symantec Third-Party Legal Notices

CSS : petits compléments

Archived Content. Contenu archivé

Sun StorEdge A5000 Installation Guide

Formulaire de Modification de Données de l Emploi/Job Data Change Form France

Archived Content. Contenu archivé

In-Home Caregivers Teleconference with Canadian Bar Association September 17, 2015

Windows Phone Marketing Kit for Windows Phone Store App Developers

Sun Management Center Change Manager Release Notes

Sun StorEdge Availability Suite Software Point-in-Time Copy Software Maximizing Backup Performance

Introduction au BIM. ESEB Seyssinet-Pariset Economie de la construction contact@eseb.fr

Modifier le texte d'un élément d'un feuillet, en le spécifiant par son numéro d'index:

Introduction. GEAL Bibliothèque Java pour écrire des algorithmes évolutionnaires. Objectifs. Simplicité Evolution et coévolution Parallélisme

Archived Content. Contenu archivé

General Certificate of Education Advanced Level Examination June 2012

TP1 : Correction. Rappels : Stream, Thread et Socket TCP

InGenius Connector Enterprise Demo System for Microsoft Dynamics CRM

Sun Management Center 3.6 Version 5 Add-On Software Release Notes

Thursday, February 7, DOM via PHP

This document is a preview generated by EVS

HEALTH CARE DIRECTIVES ACT

Thailand Business visa Application for citizens of Hong Kong living in Manitoba

System Requirements Orion

Survey on Conference Services provided by the United Nations Office at Geneva

Calcul parallèle avec R

BILL C-665 PROJET DE LOI C-665 C-665 C-665 HOUSE OF COMMONS OF CANADA CHAMBRE DES COMMUNES DU CANADA

Archived Content. Contenu archivé

Windows 10 Quoi de neuf dans la plateforme de développement? Etienne Margraff Microsoft Technical

Start Here. Installation and Documentation Reference. Sun StorEdgeTM 6120 Array

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Web - Travaux Pratiques 1

Measuring Policing Complexity: A Research Based Agenda

Solaris 9 9/05 Installation Roadmap

Life Sciences. Volume 5 August Issue date: August 7, 2008

2 RENSEIGNEMENTS CONCERNANT L ASSURÉ SI CELUI-CI N EST PAS LE REQUÉRANT INFORMATION CONCERNING THE INSURED PERSON IF OTHER THAN THE APPLICANT

Sun Enterprise Optional Power Sequencer Installation Guide

Veritas Storage Foundation 5.0 Software for SPARC

Upgrading the Solaris PC NetLink Software

Machine de Soufflage defibre

Office of the Auditor General / Bureau du vérificateur général FOLLOW-UP TO THE 2010 AUDIT OF COMPRESSED WORK WEEK AGREEMENTS 2012 SUIVI DE LA

Archived Content. Contenu archivé


This document is a preview generated by EVS

Dental Insurance Claims Identification of Atypical Claims Activity

Interfaces de programmation pour les composants de la solution LiveCycle ES (juillet 2008)

Technical Service Bulletin

AgroMarketDay. Research Application Summary pp: Abstract

Les fragments. Programmation Mobile Android Master CCI. Une application avec deux fragments. Premier layout : le formulaire

Sun Management Center 3.5 Update 1b Release Notes

Sun Cluster 2.2 7/00 Data Services Update: Apache Web Server

This document is a preview generated by EVS

«Object-Oriented Multi-Methods in Cecil» Craig Chambers (Cours IFT6310, H08)

Introduction ToIP/Asterisk Quelques applications Trixbox/FOP Autres distributions Conclusion. Asterisk et la ToIP. Projet tuteuré

Sun TM SNMP Management Agent Release Notes, Version 1.6

SunFDDI 6.0 on the Sun Enterprise Server

STUDENT APPLICATION FORM (Dossier d Inscription) ACADEMIC YEAR (Année Scolaire )

Sun StorEdge RAID Manager Release Notes

HOW TO PARTICIPATE AT THE MEETING

ENABLING OBJECTIVE AND TEACHING POINTS. DRILL: TIME: One 30 minutes period. 6. METHOD/APPROACH: a. demonstration; and. b. performance.

Electrical/Electronics

Level 2 French, 2014

Scrubbing Disks Using the Solaris Operating Environment Format Program

RÉPONSE DE ÉNERGIE LA LIÈVRE S.E.C. ET D ÉNERGIE BROOKFIELD MARKETING INC. À LA DEMANDE DE RENSEIGNEMENT N o 1 DE LA RÉGIE DE L ÉNERGIE («RÉGIE»)

Setting up a monitoring and remote control tool

This document is a preview generated by EVS

ANNEX 1. Le Greffe. The Registry

Optimizing Solaris Resources Through Load Balancing

at à 02 :00 PM on le

TABLECLOTHS TEMPLATES

Sun Grid Engine Release Notes

EPREUVE D EXPRESSION ORALE. SAVOIR et SAVOIR-FAIRE

ACP-EU Cooperation Programme in Science and Technology (S&T II) / Programme de Coopération ACP-UE pour la Science et la Technologie

This document is a preview generated by EVS

Product / Produit Description Duration /Days Total / Total

Transcription:

1 MahApps 1. INSTALLATION... 2 2. MAINWINDOW... 2 a. Changer l apparence de la fenêtre... 3 a. Cacher la barre de titre... 4 b. Désactiver la mise en majuscules du titre de la fenêtre... 4 c. Cacher les boutons system... 4 d. ResizeMode with «Grip»... 4 e. Changer la couleur de bordure de la fenêtre... 4 f. Changer l icône de la fenêtre... 5 g. Ajout de boutons à la barre de titre... 6 h. Status bar... 7 3.CONTROLES... 7 a. Boutons... 7 b. Toggle switch... 9 c. TextBox... 10 d. Progress ring et progress bar... 12 e. Slider... 12 f. ComboBox et ListBox... 13 g. GroupBox, Expander... 13 h. ScrollViewer... 14 i. TabControl... 14 j. MessageDialog... 17 k. Progress dialog... 18 l. Flyout... 19 4. PERSONNALISATION... 20 a. Accents, thèmes, couleurs... 20 b. Icons... 22

2 MahApps est un projet OpenSource qui permet de faire de belles interfaces au style «Metro» avec Wpf Site, Quick-start, Sources sur Github, exemples d applications 1. Installation PM> install-package MahApps.Metro 2. MainWindow Fenêtre principale de l application Barre de titre Icone Boutons à gauche Boutons à droite Boutons systèmes En résumé Barre de statut ResiszeGrip Code pour une fenêtre de base : ResizeGrip, Couleur de bordure (GlowBrush ou BorderBrush) et icône. <controls:metrowindow xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls" NonActiveGlowBrush="Red" ResizeMode="CanResizeWithGrip" GlowBrush="{DynamicResource AccentColorBrush}" WindowStartupLocation="CenterScreen" Icon="/Images/Twitter.png"> <Grid> </Grid> </controls:metrowindow> Changer la classe de base de la fenêtre public partial class MainWindow : MetroWindow {

3 Dans le détail a. Changer l apparence de la fenêtre 1. «MainWindow» : Ajouter le namespace et changer la balise de la fenêtre <controls:metrowindow x:class="mahappsdemo.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls" Title="MainWindow" Height="350" Width="525"> <Grid> </Grid> </controls:metrowindow> 2. Code-behind : Changer la classe base de la fenêtre public partial class MainWindow : MetroWindow { 3. «App» : Ajouter les ressources <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml " /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> On obtient la fenêtre de base

4 a. Cacher la barre de titre <controls:metrowindow ShowTitleBar="False"> </controls:metrowindow> Ajouter b. Désactiver la mise en majuscules du titre de la fenêtre TitleCaps="False" c. Cacher les boutons system «Close» «RestoreMax» «Min» <controls:metrowindow ShowMinButton="False" ShowMaxRestoreButton="False" ShowCloseButton="False"> </controls:metrowindow> d. ResizeMode with «Grip» ResizeMode="CanResizeWithGrip" Une «poignée» est ajoutée en bas à droite permettant de redimensionner la fenêtre e. Changer la couleur de bordure de la fenêtre Couleur ou ressource BorderBrush="{DynamicResource AccentColorBrush}" Ou si on veut un effet de «Glow» GlowBrush="{DynamicResource AccentColorBrush}"

5 On peut de plus régler la largeur de la bordure avec «BorderThickness» BorderThickness="5" Changer la couleur des bordures et barre de titre à l état «non actif» (perte de focus) NonActiveBorderBrush="Red" NonActiveGlowBrush="Red" NonActiveWindowTitleBrush="Red" f. Changer l icône de la fenêtre (Taille de l image ici 48x48) (*.ico, *.png, etc.)

6 Icon="/Images/Twitter.png" Avoir une icône (dans la barre de tache) et une autre pour la barre de titre de la fenêtre <controls:metrowindow Icon="/Images/Twitter.ico"> <controls:metrowindow.icontemplate> <DataTemplate> <Image Source="/Images/Twitter.png" /> </DataTemplate> </controls:metrowindow.icontemplate> </controls:metrowindow> Affichée dans la barre de tâches Template pour l image affichée dans la barre de titre de la fenêtre g. Ajout de boutons à la barre de titre <controls:metrowindow > <controls:metrowindow.leftwindowcommands> <controls:windowcommands> <Button FontSize="20" FontFamily="Wingdings">D</Button> <Button FontSize="20" FontFamily="Wingdings">J</Button> </controls:windowcommands> </controls:metrowindow.leftwindowcommands> <controls:metrowindow.rightwindowcommands> <controls:windowcommands> <Button Content="Contact"></Button> <Button Content="Paramètres"></Button> </controls:windowcommands> </controls:metrowindow.rightwindowcommands> </controls:metrowindow> Boutons à gauche Boutons à doite Utiliser la table de caractères avec la «font» Wingdings

7 h. Status bar <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="25"/> </Grid.RowDefinitions> <StatusBar Grid.Row="1"> <StatusBarItem>Prêt</StatusBarItem> <Separator Style="{StaticResource MetroStatusBarSeparator}"></Separator> <StatusBarItem>Message</StatusBarItem> </StatusBar> </Grid> 3.Contrôles Des démos sont disponibles avec les sources sur Github a. Boutons «Default button» Un style est appliqué par défaut Désactiver la mise en majuscules <Button Content="Valider" controls:buttonhelper.preservetextcase="true"></button> «Square button» Style="{DynamicResource SquareButtonStyle}" Style="{DynamicResource AccentedSquareButtonStyle}" «Circle button» <Button Content="Envoyer" Height="60" Width="60" Style="{DynamicResource MetroCircleButtonStyle}"></Button>

8 Avec image <Button Height="60" Width="60" Style="{DynamicResource MetroCircleButtonStyle}"> <Button.Content> <Image Source="/images/Twitter.png" /> </Button.Content> </Button> Ou tout autre contenu (rectangle, ) <Button Width="50" Height="50" Style="{DynamicResource MetroCircleButtonStyle}"> <Button.Resources> <Canvas x:key="appbar_city" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0"> <Path Width="38" Height="38.7916" Canvas.Left="19" Canvas.Top="18.2084" Stretch="Fill" Fill="{DynamicResource BlackBrush}" Data="F1 M 44.3333,30.0833L 57,30.0833L 57,57L 44.3333,57L 44.3333,30.0833 Z M 46.3125,35.2292L 46.3125,38L 49.0833,38L 49.0833,35.2292L 46.3125,35.2292 Z M 52.25,35.2292L 52.25,38L 55.0208,38L 55.0208,35.2292L 52.25,35.2292 Z M 46.3125,39.9792L 46.3125,42.75L 49.0833,42.75L 49.0833,39.9792L 46.3125,39.9792 Z M 52.25,39.9792L 52.25,42.75L 55.0208,42.75L 55.0208,39.9792L 52.25,39.9792 Z M 46.3125,44.7292L 46.3125,47.5L 49.0833,47.5L 49.0833,44.7292L 46.3125,44.7292 Z M 52.25,44.7292L 52.25,47.5L 55.0208,47.5L 55.0208,44.7292L 52.25,44.7292 Z M 46.3125,49.4792L 46.3125,52.25L 49.0833,52.25L 49.0833,49.4792L 46.3125,49.4792 Z M 52.25,49.4792L 52.25,52.25L 55.0208,52.25L 55.0208,49.4792L 52.25,49.4792 Z M 23.75,25.3333L 25.3333,22.1667L 26.9167,22.1667L 26.9167,18.2084L 28.5,18.2084L 28.5,22.1667L 31.6667,22.1667L 31.6667,18.2084L 33.25,18.2084L 33.25,22.1667L 34.8333,22.1667L 36.4167,25.3333L 36.4167,34.8334L 38.7917,34.8333L 41.1667,37.2083L 41.1667,57L 19,57L 19,37.2083L 21.375,34.8333L 23.75,34.8334L 23.75,25.3333 Z M 25.7291,27.3125L 25.7291,30.0834L 28.1041,30.0834L 28.1041,27.3125L 25.7291,27.3125 Z M 32.0625,27.3125L 32.0625,30.0834L 34.4375,30.0834L 34.4375,27.3125L 32.0625,27.3125 Z M 25.7291,32.0625L 25.7291,34.8334L 28.1041,34.8334L 28.1041,32.0625L 25.7291,32.0625 Z M 32.0625,32.0625L 32.0625,34.8334L 34.4375,34.8334L 34.4375,32.0625L 32.0625,32.0625 Z M 30.875,39.9792L 28.8958,39.9792L 28.8958,42.75L 30.875,42.75L 30.875,39.9792 Z M 24.5416,39.9792L 24.5416,42.75L 26.9166,42.75L 26.9166,39.9792L 24.5416,39.9792 Z M 36.0208,39.9792L 33.25,39.9792L 33.25,42.75L 36.0208,42.75L 36.0208,39.9792 Z M 30.875,44.7292L 28.8958,44.7292L 28.8958,47.5L 30.875,47.5L 30.875,44.7292 Z M 26.9166,44.7292L 24.5416,44.7292L 24.5416,47.5L 26.9166,47.5L 26.9166,44.7292 Z M 36.0208,44.7292L 33.25,44.7292L 33.25,47.5L 36.0208,47.5L 36.0208,44.7292 Z M 30.875,49.4792L 28.8958,49.4792L 28.8958,52.25L 30.875,52.25L 30.875,49.4792 Z M 26.9166,49.4792L 24.5416,49.4792L 24.5417,52.25L 26.9167,52.25L 26.9166,49.4792 Z M 36.0208,49.4792L 33.25,49.4792L 33.25,52.25L 36.0208,52.25L 36.0208,49.4792 Z "/> </Canvas> </Button.Resources> <Rectangle Width="20" Height="20" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"> <Rectangle.OpacityMask> <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_city}" /> </Rectangle.OpacityMask> </Rectangle> </Button>

9 «Flat button» <StackPanel> <StackPanel.Resources> <ResourceDictionary> Requiert <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/FlatButton.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </StackPanel.Resources> <Button Width="100" Margin="0, 10, 0, 0" Content="Enabled" /> <Button Width="100" Margin="0, 10, 0, 0" Content="Disabled" IsEnabled="False" /> </StackPanel> b. Toggle switch Peut remplacer par exemple une case à cocher (checkbox) 2 labels (un pour chaque état du bouton) <controls:toggleswitch Width="200" IsChecked="True" OnLabel="Actif" OffLabel="Inactif" /> Customiser le style Pour ne pas avoir de label laisser la chaine «vide» <Style TargetType="{x:Type controls:toggleswitch}" x:key="custommetrotoggleswitch" BasedOn="{StaticResource {x:type controls:toggleswitch}}"> <Setter Property="SwitchForeground" Value="Red" /> <Setter Property="OnLabel" Value="True" /> <Setter Property="OffLabel" Value="False" /> </Style>

10 «Toggle button» <ToggleButton Width="100" Content="Enabled" /> c. TextBox Correction orthographique <TextBox Text="Un texteu avec une erreur d'orthographeu" controls:textboxhelper.isspellcheckcontextmenuenabled="true" /> (Idem pour RichTextBox) Placeholder <TextBox controls:textboxhelper.watermark="entrez votre nom" /> Autre exemple <TextBox controls:textboxhelper.watermark="entrez votre nom" controls:textboxhelper.usefloatingwatermark="true" controls:textboxhelper.iswaitingfordata="true" /> «Clear TextBox» <TextBox controls:textboxhelper.buttoncommand="{binding TextBoxButtonCmd, Mode=OneWay}" Text="Du blabla"> <TextBox.Style>

11 <Style TargetType="TextBox" BasedOn="{StaticResource MetroTextBox}"> <Setter Property="controls:TextBoxHelper.ClearTextButton" Value="True"></Setter> <Style.Triggers> <Trigger Property="controls:TextBoxHelper.HasText" Value="False"> <Setter Property="controls:TextBoxHelper.ClearTextButton" Value="False" /> <Setter Property="controls:TextBoxHelper.Watermark" Value="Entrez votre nom" /> </Trigger> <Trigger Property="controls:TextBoxHelper.HasText" Value="True"> <Setter Property="controls:TextBoxHelper.ClearTextButton" Value="True" /> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> «Search box» <TextBox controls:textboxhelper.watermark="rechercher" controls:textboxhelper.buttoncommand="{binding TextBoxButtonCmdWithParameter, Mode=OneWay}" controls:textboxhelper.buttoncommandparameter="{binding ElementName=test2, Path=Text}" Style="{DynamicResource SearchMetroTextBox}" /> Custom icon <TextBox controls:textboxhelper.watermark="custom..." controls:textboxhelper.buttoncontent="s" controls:textboxhelper.buttoncommand="{binding TextBoxButtonCmd, Mode=OneWay}" Style="{DynamicResource MetroButtonTextBox}" /> Autre exemple

12 <TextBox controls:textboxhelper.watermark="rechercher..." controls:textboxhelper.usefloatingwatermark="true" controls:textboxhelper.cleartextbutton="true" controls:textboxhelper.buttoncommand="{binding TextBoxButtonCmd, Mode=OneWay}"> <TextBox.Style> <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource SearchMetroTextBox}"> <Style.Triggers> <Trigger Property="controls:TextBoxHelper.HasText" Value="True"> <Setter Property="controls:TextBoxHelper.ButtonTemplate" Value="{DynamicResource ChromelessButtonTemplate}" /> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> «Numeric up down» <controls:numericupdown Value="5" TextAlignment="Left" Minimum="0" Maximum="10" IsReadOnly="True"/> d. Progress ring et progress bar <controls:progressring IsActive="True" Width="40" Height="40" /> <controls:metroprogressbar IsIndeterminate="True" Value="{Binding ElementName=horizSlider, Path=Value}" Minimum="0" Maximum="100" Width="200" Foreground="{DynamicResource AccentColorBrush}" /> e. Slider <Slider VerticalAlignment="top" HorizontalAlignment="Left" Width="132" TickPlacement="BottomRight" TickFrequency="25" Value="50" />

13 f. ComboBox et ListBox Auto-complétion <ComboBox Width="200" Listbox Margin="0, 10, 0, 0" Style="{DynamicResource VirtualisedMetroComboBox}" controls:textboxhelper.watermark="entrez un nom" DisplayMemberPath="Name" IsEditable="True" ItemsSource="{Binding People}" MaxDropDownHeight="125" Text="{Binding Name}" /> Bindé sur une liste de personnes, on affiche la propriété «Name» de la classe «Person» Style appliqué par défaut <ListBox ItemsSource="{Binding People}" DisplayMemberPath="Name" Margin="1" IsEnabled="False" SelectedIndex="0" /> g. GroupBox, Expander <GroupBox Header="Personnes" > <ListBox ItemsSource="{Binding People}" /> </GroupBox> Expander <Expander Header="Personnes" > <ListBox ItemsSource="{Binding People}" /> </Expander>

14 h. ScrollViewer <ScrollViewer> <Grid> <!-- etc. --> </Grid> </ScrollViewer> i. TabControl <TabControl> <TabItem Header="item 1" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="Content" /> </TabItem> <TabItem Header="item 2" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="More content" /> </TabItem> <TabItem Header="item 3" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="More more content" /> </TabItem> </TabControl>

15 Animé 1. Ajouté le dictionnaire en ressources de l application (ou dans conteneur pour l exemple) 2. Utiliser MetroTabItem <Grid> <Grid.Resources> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedTabCo ntrol.xaml" /> </Grid.Resources> <TabControl> <controls:metrotabitem Header="item 1" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="Content" /> </controls:metrotabitem> <controls:metrotabitem Header="item 2" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="More content" /> </controls:metrotabitem> <controls:metrotabitem Header="item 3" controls:controlshelper.headerfontsize="18"> <TextBlock FontSize="30" Text="More more content" /> </controls:metrotabitem> </TabControl> </Grid> Ou simplement <Grid> <Grid.Resources> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedTabCo ntrol.xaml" /> </Grid.Resources> <TabControl> <TabItem Header="item 1"> <TextBlock FontSize="30" Text="Content" /> </TabItem> <TabItem Header="item 2"> <TextBlock FontSize="30" Text="More content" /> </TabItem> <TabItem Header="item 3"> <TextBlock FontSize="30" Text="More more content" /> </TabItem> </TabControl> </Grid>

16 TabItems pouvant être fermés <controls:metrotabcontrol TabItemClosingEvent="MetroTabControl_TabItemClosingEvent"> <controls:metrotabitem Header="item 1" controls:controlshelper.headerfontsize="20" CloseButtonEnabled="True" CloseTabCommand="{Binding SingleCloseTabCommand}" CloseTabCommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}"> <TextBlock FontSize="30" Text="you can bind to a command" /> </controls:metrotabitem> <controls:metrotabitem Header="item 2" controls:controlshelper.headerfontsize="22" CloseButtonEnabled="True" CloseTabCommand="{Binding NeverCloseTabCommand}" CloseTabCommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}"> <TextBlock FontSize="30" Text="and ensure the command never closes" /> </controls:metrotabitem> <controls:metrotabitem Header="item 3" controls:controlshelper.headerfontsize="24" CloseButtonEnabled="True"> <TextBlock FontSize="30" Text="More more content" /> </controls:metrotabitem> </controls:metrotabcontrol> On ajoute «CloseButtonEnabled» aux tabitems pouvant être fermés Onglets à gauche (ou droite) <TabControl TabStripPlacement="Left" Height="100"> <TabItem Header="LeftItem0"> <TextBlock FontSize="30" Text="This is left content 0" /> </TabItem> <TabItem Header="LeftItem1"> <TextBlock FontSize="30" Text="This is left content 1" /> </TabItem> <TabItem Header="LeftItem2"> <TextBlock FontSize="30" Text="This is left content 2" /> </TabItem> </TabControl>

17 Ligne et choix de transition <controls:metroanimatedtabcontrol controls:tabcontrolhelper.isunderlined="true" controls:tabcontrolhelper.transition="up"> Le contenu arrivera par le bas <controls:metrotabitem Header="item 1"> <TextBlock FontSize="30" Text="Content" /> </controls:metrotabitem> <controls:metrotabitem Header="item 2"> <TextBlock FontSize="30" Text="More content" /> </controls:metrotabitem> <controls:metrotabitem Header="item 3"> <TextBlock FontSize="30" Text="More more content" /> </controls:metrotabitem> </controls:metroanimatedtabcontrol> j. MessageDialog Appelé au click sur un bouton par exemple private async void ShowMessageDialog() { var result = await this.showmessageasync("bonjour!", "Message...", MessageDialogStyle.AffirmativeAndNegative); if (result!= MessageDialogResult.Affirmative) { } }

18 Autre exemple avec settings et boutons supplémentaires private async void ShowMessageDialog() { var settings = new MetroDialogSettings() { AffirmativeButtonText = "Option 1 ", NegativeButtonText = "Option 2", FirstAuxiliaryButtonText = "Annuler", ColorScheme = MetroDialogColorScheme.Theme }; MessageDialogResult result = await this.showmessageasync("bonjour!", "Message...", MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary,settings); if (result!= MessageDialogResult.FirstAuxiliary) { } } k. Progress dialog Appelé depuis MainWindow (ou créer un service) private async void ShowProgressAsync() { var controller = await this.showprogressasync("chargement", "Veuillez patienter, svp..."); await Task.Delay(5000); await controller.closeasync(); }

19 l. Flyout Ajouté à MainWindow <controls:metrowindow.flyouts> <controls:flyoutscontrol> <controls:flyout Position="Right" AreAnimationsEnabled="True" Header="Connexion" IsOpen="{Binding IsOpened}"> <local:loginflyout /> </controls:flyout> </controls:flyoutscontrol> </controls:metrowindow.flyouts> «true» On ajoute également pour masquer les boutons de la fenêtre principale sous le flyout <controls:metrowindow RightWindowCommandsOverlayBehavior="Never"> Un UserControl que l on crée, affiché quand la propriété «IsOpened» de la source de données est La même disponible pour les boutons à gauche de la barre de titre avec «LeftWindowCommandsOverlayBehavior»

20 4. Personnalisation a. Accents, thèmes, couleurs Accents : Red, Green, Blue, Purple, Orange, Lime, Emerald, Teal, Cyan, Cobalt, Indigo, Violet, Pink, Magenta, Crimson, Amber, Yellow, Brown, Olive, Steel, Mauve, Taupe, Sienna Si on change le dictionnaire par exemple <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Red.xaml" /> Thèmes : BaseLight, BaseDark Si on change la ressource liée au thème <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />

21 Utiliser la couleur d accent <TextBlock FontSize="30" Text="Content" Foreground="{DynamicResource AccentColorBrush}"/> Ne change pas selon le thème Par contre les couleurs (colors.xaml) changent selon le thème <TextBlock FontSize="30" Text="Content" Foreground="{DynamicResource GrayBrush1}"/>

22 b. Icons (Projet «MahApps.Metro.Ressources») Installation PM> install-package MahApps.Metro.Resources Le dossier Resources est ajouté au projet. Référencer <ResourceDictionary Source="/Resources/Icons.xaml" />

23 Utilisation <Button Width="50" Height="50" Margin="0, 10, 0, 0" Style="{DynamicResource MetroCircleButtonStyle}"> <Rectangle Width="20" Height="20" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"> <Rectangle.OpacityMask> <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_youtube}" /> </Rectangle.OpacityMask> </Rectangle> </Button> http://www.entypo.com/ <Button Width="50" Height="50" FontSize="40" FontFamily="/Resources/#Entypo" Style="{DynamicResource MetroCircleButtonStyle}">r</Button> http://www.metrostudio.com/