Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Vko

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

- [MSTD10] SharePoint 2010 et Team Foundation Server par Philippe Sentenac [MVP SharePoint] le il y a 3 heures et 33 minutes

- [MSTD10] SQL Server 2008 pour les développeurs et Visual Studio Team System Database Edition par Michel Perfetti [Miiitch] le il y a 4 heures et 23 minutes

- [WF4] Localiser simplement une activité et son designer WPF par Blog de Jérémy Jeanson le il y a 5 heures et 34 minutes

- [Techdays 2010] Webcasts et Slides par Blog Technique d'Audrey PETIT le il y a 5 heures et 53 minutes

- NDepend v3. J’adore son intégration avec VS2010 par Thomas Jaskula le il y a 14 heures et 5 minutes

- XNA 4.0 pour créer des jeux 3D sous Windows Phone 7 Series par Code is poetry le 03-10-2010, 14:14

- [Tools] NDepend 3 dans Visual Studio, Waaaaaaaou!!! par Blog de Jérémy Jeanson le 03-10-2010, 08:42

- [WF4] Grosses méprises en perspective sur le kit de migration WF3->WF4 par Blog de Jérémy Jeanson le 03-09-2010, 10:04

- Réunion du club moss paris par VANNESTE Xavier le 03-08-2010, 22:56

- [WF4] Argument, qui es tu? par Blog de Jérémy Jeanson le 03-08-2010, 19:34