Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Cyril Sansus

WPF, Interfaces Utilisateurs et .NET
[WPF] Déplacer des Windows sans bordure

WPF offre la possibilité de masquer la bordure et la barre de titre. Parfait pour créer des fenêtres arrondies, rondes, etc. Mais attention sans barre de titre, il n’est plus possible de déplacer une fenêtre !! “Don’t panic”, il existe un contrôle très sympas en WPF qui va nous aider : le Thumb.

Obtenir une fenêtre ronde en WPF

Pour créer une fenêtre ronde en WPF, il y a deux choses à faire. Premièrement il faut modifier deux propriétés de la fenêtre afin de masquer la barre de titre. Les propriétés en question sont : AllowsTransparency et WindowsStyle.

Deuxièmement, il faut modifier le Template de base de la fenêtre en remplaçant la bordure par défaut par une ellipse. On peut réaliser tout ceci via le style (version très épurée) de la fenêtre :

<Window.Style>
    <Style TargetType="{x:Type Window}">
        <Setter Property="AllowsTransparency" Value="True" />
        <Setter Property="WindowStyle" Value="None" />
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Grid>
                        <Ellipse Fill="{TemplateBinding Background}" 
                                 Stroke="{TemplateBinding BorderBrush}" 
                                 StrokeThickness="{TemplateBinding BorderThickness}" />
                        <ContentPresenter />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Style>
 
On obtient ainsi une “jolie” fenêtre ronde mais il n’est pas possible de la déplacer (A noter que Alt+F4 permet de fermer la fenêtre).
Déplacer la fenêtre

La solution la plus simple (merci Lionel) est d’ajouter un élément quelconque et de se brancher sur l’évènement MouseLeftButtonDown. Ensuite il suffit d’utiliser la méthode DragMove de la fenêtre … et hop magie !

Le code XAML :

<Grid>
       <Rectangle Width="50" Height="50" Fill="White" 
                MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"/>
</Grid>

Le code C# :

private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DragMove();
}

Autre possibilité, utiliser le controle Thumb.

Le contrôle Thumb est un contrôle prévu pour les opérations de déplacement (Drag&Drop par exemple). Il permet de s’abstraire de la gestion de la souris (capture et calcul du delta de déplacement) et fournit directement un évènement DragDelta qui est levé à chaque fois que vous faites du drag au niveau du Thumb … bon là je suis pas clair, mieux vaut le code.

Voici dons le code XAML et CS qui permettra de mettre en place le Thumb :

<Grid>
      <Thumb Width="50" Height="50" DragDelta="Thumb_DragDelta" />
</Grid>

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
    this.Left += e.HorizontalChange;
    this.Top += e.VerticalChange;
}

Hop, vous obtenez une magnifique fenêtre ronde et déplaçable.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 30 septembre 2009 07:29 par Vko
Classé sous :

Commentaires

Thomas LEBRUN a dit :

# septembre 30, 2009 09:24

JeremyJeanson a dit :

Tu as été 10 s plus rapide que moi Thomas ;)

# septembre 30, 2009 09:27

Vko a dit :

En fait j'ai déjà modifié mon post pour mettre la solution simple.

L'objectif principal est surtou de faire découvrir le Thumb qui peut avoir plusieurs atouts dans des cas beaucoup plus divers.

je ferrais une ptt application pour illustrer ca.

# septembre 30, 2009 09:33
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 20 heures et 49 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 23 heures et 22 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39