Affichage des articles dont le libellé est WPF. Afficher tous les articles
Affichage des articles dont le libellé est WPF. Afficher tous les articles

12/07/2013

[Converter] BoolToVisibility

Allez c'est sans conteste, le converter dont vous vous servirez le plus. Convertir un Boolean en Visibility

Bon je pense qu'il n'y a pas besoin d'explication supplémentaire sur l'intérêt de ce converter donc :

public class BoolToVisibilityConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            // Vérification de la valeur
            if (value == null)
            {
                return null;
            }
            else
            {
                var myBoolean = (bool)value;

                // Vérification du paramètre
                if (parameter != null)
                {
                    // Autant de paramètre qu'on veut
                    switch (parameter.ToString())
                    {
                        case "invert":
                            return myBoolean ? Visibility.Collapsed : Visibility.Visible;
                        default:
                            return myBoolean ? Visibility.Visible : Visibility.Collapsed;
                    }
                }
                else
                {
                    return myBoolean ? Visibility.Visible : Visibility.Collapsed;
                }
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Pour en savoir plus sur les converter c'est par ici

Une notion abordée ici qui n'est pas abordée dans mon précédent article est le ConverterParameter qui sert tout simplement à passer un paramètre à mon converter. Dans ma classe, le paramètre invert permet d'inverser le résultat.


    
        
    


Il est à noter qu'en WPF le framework embarque directement le converter donc, il reste plus qu'à l'instancier dans notre code côté XAML :


      

A Lundi pour une nouvelle vidéo.

05/07/2013

[Converter] ImagePicker

On inaugure aujourd'hui la catégorie des Converter en démarrant avec un sélecteur d'image.

Pour finir cette semaine tranquillement, je vous propose un sélecteur d'image :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Data;

namespace MyApp.WP8.View.Converter
{
    public class ImagePicker : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string matchString = Regex.Match(value.ToString(), @"(?<=<img.*?src=\"")[^\""]*(?=\"".*?((/>)|(>.*</img)))").Value;
            if (matchString == "")
            {
                return "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPgjvN03Mt9fpkGDo4AnQtOImddidJGYXbT18Yz7EyjBpt2NNrxZ1IvJXnCMNQEY-lNftZb66KYRznXWTCZSyH5HAkiRtD-JrMfbRaZQUzWUUz4PqOQlvlVFgu2zjV5YYlM3M0FMkyRUMN/s220/AvatarFB.png";
            }
            else
            {
                return matchString;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Très utile notamment pour les flux RSS, il va nous permettre de renvoyer une image par défaut si notre item ne contient pas d'image.

Bon WE. A lundi pour un nouveau Tuto vidéo.

12/10/2011

[XAML] Notifications dans la barre de tâches

En dépannage (qui devient souvent permanent), on a parfois besoin de créer de petits outils avec un accès rapide à 2-3 fonctionnalitées sans forcément nécessiter une (grosse) interface graphique. Moi j'obte dans ce cas pour une application silencieuse avec des accès direct depuis la zone de notification.

Et bien voilà, en WPF rien de natif pour créer des icônes dans la zone de notification et pour celles et ceux qui me lise déjà, vous savez que je ne suis pas fan de réutiliser des Winforms pour pallier à ce problème. J'utilise donc une API qui a été développée par Philipp Sumi. Son API est très efficace pour avoir rapidemment un résultat et en même temps permets d'affiner très précisément si besoin.

On démarre par télécharger le projet ici

On ouvre, on compile, et on va chercher la merveilleuse : Hardcodet.Wpf.TaskbarNotification.dll

Donc notre projet, on rajoute la dll en référence ("Project", "Add Reference...")

Puis on l'instancie dans le XAML :

xmlns:systray="clr-namespace:Hardcodet.Wpf.TaskbarNotification;assembly=Hardcodet.Wpf.TaskbarNotification"

Ensuite on rajoute notre composant :
<systray:TaskbarIcon x:Name="mySystrayIcon" IconSource="/Images/test.ico" ToolTipText="Test">
</systray:TaskbarIcon>

Pour rajouter un menu contextuel, rien de plus simple, celui ci est disponible :
<systray:TaskbarIcon x:Name="mySystrayIcon" IconSource="/Images/test.ico" ToolTipText="Test">
   <systray:TaskbarIcon.ContextMenu>
      <ContextMenu>
         <MenuItem Header="Test"/>
      </ContextMenu>
   </systray:TaskbarIcon.ContextMenu>
</systray:TaskbarIcon>

Ce qui m'a de suite séduit dans cette API c'est le fait de pouvoir utiliser des UserControl pour effectuer ses notifications.

Vous créez donc votre notification dans un Userontrol :


Ensute on rajoute bien évidemment la référence vers le local :
xmlns:local="clr-namespace:MonApplication"

Et on l'intègre de cette façon :
<systray:TaskbarIcon x:Name="mySystrayIcon" IconSource="/Images/test.ico" ToolTipText="Test">
   <systray:TaskbarIcon.TrayPopup>
      <local:MyUserControl/>
   </systray:TaskbarIcon.TrayPopup>
   <systray:TaskbarIcon.ContextMenu>
      <ContextMenu>
         <MenuItem Header="Test"/>
      </ContextMenu>
   </systray:TaskbarIcon.ContextMenu>
</systray:TaskbarIcon>
Ensuite si vous souhaitez utiliser votre User Control à partir du code behind, vous allez procéder comme ceci :

private void ShowMyUserControl()
{
   mySystrayIcon.ShowCustomBalloon(new MyUserControl(), System.Windows.Controls.Primitives.PopupAnimation.Slide, 2500);
}
Personnellement j'aime utiliser mes petites applications de cette manière là c'est à dire avec juste un menu contextuel personnalisé qui s'efface lorsqu'il perd le focus. Ce qui donne :
<systray:TaskbarIcon x:Name="mySystrayIcon" IconSource="/Images/test.ico" ToolTipText="Test" PopupActivation="RightClick" TrayLeftMouseUp="mySystrayIcon_TrayLeftMouseUp" >
   <systray:TaskbarIcon.TrayPopup>
      <local:UC LostFocus="UC_LostFocus"/>
   </systray:TaskbarIcon.TrayPopup>
</systray:TaskbarIcon>
Et dans mon code behind:

public MainWindow()
{
   this.Visibility = System.Windows.Visibility.Hidden;
}

private void UC_LostFocus()
{
   this.Close();
}

private void mySystrayIcon_TrayLeftMouseUp()
{
   //Traitement sur le clic gauche.
}
Vous avez également remarqué que je me suis abonné à TrayLeftMouseUp qui me permet de gérer mon clic gauche.

Vous pouvez retrouver le tutoriel intégral de Philipp Sumi en anglais sur The Code Project, il couvre vraiment la plupart des cas (Du moins les miens ont trouvés toutes les réponses) et notamment approfondie la partie command, routed event, databindig.

06/06/2011

[.NET] Mettre à jour un TextBlock à partir d'un TreeView

Voici comment mettre à jour dynamiquement la propriété Text d'un TextBlock en fonction du Header d'un TreeViewItem qui vient d'être sélectionné :



private void TreeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) 
{ 
   TreeView tv = (TreeView)sender;
   TreeViewItem item = (TreeViewItem)tv.SelectedItem; 
   textblock.Text = item.Header.ToString(); 
}  
Rien de bien compliqué, on s'abonne à l'événement du SelectedItemChanged. On fait un cast du sender en TreeView qui lui-même sera casté en TreeViewItem. Puis on affiche le Header.

15/09/2010

[Livre] MCTS 70-502 Windows Presentation Foundation

Dans la série des livres préparant aux certifications microsoft. Voici Windows Presentation Foundation (WPF).






Livre est bien évidemment complet sur le sujet :

- Windows Application
- Navigation Application
- XBAP
- Images
- DataBinding
- Styles, Triggers
- Impressions
- Déploiement

et autres...

Pour ma part, je l'ai trouvé beaucoup plus accessible que le livre préparant à la 70-536. Peut-être dans la mesure où la technologie WPF sert à concevoir l'IHM (C'est de suite plus parlant quand on voit et l'on peut tester !) ou bien parce que cela faisait plus d'un an que j'ai découvert et pratiqué la technologie WPF et le XAML (Extensible Application Markup Language).

J'ai trouvé un peu dommage que l'auteur du livre ne fasse aucune référence à la suite Expression et plus particulièrement à Blend.
Je me vois mal calculer mes points de la courbe de béziers à chaque fois que je souhaite affiner une animation. (Les courbes polynomiales paramétriques, j'ai arrêté!).

La technologie WPF est indispensable avant de se lancer dans silverlight (qui va posséder dans le courant du mois prochain une certification dédiée).




Maintenant lu, c'est révision à fond avant de passer la certification (dans les prochaines semaines, j'espère).

04/08/2010

[XAML] Contrôle Ribbon pour WPF

Bonjour à tous,

Fraichement sortie par microsoft, voici un lien où télécharger les contrôles Ribbon pour vos applications WPF/Silverlight.



ici

Une fois le fichier installé, il suffit de cliquer depuis Visual Studio 2010 ou 2008 avec sp1 sur Tools > Choose Toolbox Item... il ne vous reste plus qu'à choisir les controles du Ribbon pour les avoir disponibles dans la Toolbox.