Ma question est double, et j'espère qu'il existe des solutions plus faciles à la fois fournies par WPF plutôt que les solutions standard de WinForms (que Christophe Geers a fournies, avant que j'aie fait cette clarification).
Tout d'abord, existe-t-il un moyen de rendre Window glissé sans capturer et traiter les événements clic-souris + glisser? Je veux dire que la fenêtre peut être déplacée par la barre de titre, mais si je configure une fenêtre pour ne pas en avoir et que je veux toujours pouvoir la faire glisser, y a-t-il un moyen de simplement rediriger les événements d'une manière ou d'une autre vers ce qui gère le glissement de la barre de titre ?
Deuxièmement, existe-t-il un moyen d'appliquer un gestionnaire d'événements à tous les éléments de la fenêtre? Comme dans, faites glisser la fenêtre quel que soit l'élément sur lequel l'utilisateur clique + fait glisser. Évidemment, sans ajouter le gestionnaire manuellement, à chaque élément. Le faire une fois quelque part?
la source
MouseLeftButtonDown
événement, plutôt que d'archiver les fichiers .cs?MouseLeftButtonDown
a une stratégie de routage direct tout enMouseDown
ayant une stratégie de routage bouillonnante. Consultez la section des remarques de la page MSDN pour MouseLeftButtonDown pour plus d'informations et pour quelques informations supplémentaires à prendre en compte si vous comptez utiliserMouseLeftButtonDown
overMouseDown
.si le formulaire wpf doit être déplaçable quel que soit l'endroit où il a été cliqué, la solution de rechange facile consiste à utiliser un délégué pour déclencher la méthode DragMove () sur l'événement de chargement de Windows ou l'événement de chargement de la grille
la source
DragMove
ne peut être appelé que lorsque le bouton principal de la souris est enfoncé.Parfois, nous n'avons pas accès à
Window
, par exemple si nous utilisonsDevExpress
, tout ce qui est disponible est un fichierUIElement
.Étape 1: Ajouter une propriété jointe
La solution est de:
MouseMove
événements;Window
;.DragMove()
à notre nouvellement découvertWindow
.Code:
Étape 2: Ajouter une propriété attachée à n'importe quel élément pour le laisser faire glisser la fenêtre
L'utilisateur peut faire glisser la fenêtre entière en cliquant sur un élément spécifique, si nous ajoutons cette propriété attachée:
Annexe A: Exemple avancé facultatif
Dans cet exemple de DevExpress , nous remplaçons la barre de titre d'une fenêtre d'ancrage par notre propre rectangle gris, puis nous nous assurons que si l'utilisateur clique et fait glisser ledit rectagle gris, la fenêtre se déplacera normalement:
Avertissement: je ne suis pas affilié à DevExpress . Cette technique fonctionnera avec n'importe quel élément utilisateur, y compris WPF standard ou Telerik (un autre fournisseur de bibliothèque WPF fin).
la source
Lève une exception dans certains cas (c'est-à-dire si sur la fenêtre vous avez également une image cliquable qui, lorsque vous cliquez dessus, ouvre une boîte de message. Lorsque vous quittez la boîte de message, vous obtiendrez une erreur) Il est plus sûr d'utiliser
Vous êtes donc sûr que le bouton gauche est enfoncé à ce moment-là.
la source
e.LeftButton
au lieu deMouse.LeftButton
pour utiliser spécifiquement le bouton associé aux arguments d'événement, même si cela n'aura probablement jamais d'importance.Il est possible de glisser-déposer un formulaire en cliquant n'importe où sur le formulaire, pas seulement sur la barre de titre. Ceci est pratique si vous avez un formulaire sans bordure.
Cet article sur CodeProject montre une solution possible pour implémenter ceci:
http://www.codeproject.com/KB/cs/DraggableForm.aspx
Fondamentalement, un descendant du type Formulaire est créé dans lequel les événements de déplacement de la souris sont gérés.
Et voici une solution similaire expliquée dans un didacticiel vidéo:
http://www.youtube.com/watch?v=tJlY9aX73Vs
Je n'autoriserais pas de faire glisser le formulaire lorsqu'un utilisateur clique sur un contrôle dans ledit formulaire. Les utilisateurs obtiennent des résultats différents lorsqu'ils cliquent sur différents contrôles. Lorsque mon formulaire commence soudainement à bouger parce que j'ai cliqué sur une zone de liste, un bouton, une étiquette ... etc. ce serait déroutant.
la source
Comme déjà mentionné par @ fjch1997, il est pratique d'implémenter un comportement. Voilà, la logique de base est la même que dans la réponse de @ loi.efy :
Usage:
la source
Tout cela est nécessaire!
la source
La méthode la plus utile, à la fois pour WPF et Windows Form, exemple WPF:
la source
la source
la source