Comment créer une Fenêtre WPF sans frontière qui peut être redimensionné par l'intermédiaire d'une poignée seulement?
Si vous définissez ResizeMode="CanResizeWithGrip"
sur WPF Window
puis une poignée de redimensionnement est indiqué dans le coin en bas à droite, comme ci-dessous:
Si vous définissez WindowStyle="None"
ainsi la barre de titre disparaît, mais le gris bord biseauté reste jusqu'à ce que vous définissez ResizeMode="NoResize"
. Malheureusement, avec cette combinaison de définir les propriétés de la poignée de redimensionnement disparaît aussi.
J'ai annulé la Window
's ControlTemplate
via un custom Style
. Je tiens à préciser la frontière de la fenêtre de moi-même, et je n'ai pas besoin les utilisateurs à être en mesure de redimensionner la fenêtre de tous les quatre côtés, mais j'ai besoin d'une poignée de redimensionnement.
Quelqu'un peut détailler un moyen simple de répondre à tous ces critères?
- Ne pas ont une bordure sur le
Window
en dehors de celui que j'spécifier moi-même dans uneControlTemplate
. - Ne avoir une poignée de redimensionnement dans le coin inférieur droit.
- Ne pas ont une barre de titre.
- Veuillez noter que Allowtransperency crée fuite de mémoire. Donc éviter de l'utiliser. Veuillez consulter la social.msdn.microsoft.com/Forums/en/wpf/thread/...
- Je ne pouvais pas trouver aucune explication à cette revendication dans le lien que vous avez fourni. peut-être que vous vouliez afficher le lien social.msdn.microsoft.com/Forums/vstudio/en-US/...
- J'ai été confronté aux gris de bord en haut même si j'avais mis le style de la fenêtre à Aucun. ResizeMode="NoResize" résolu mon problème.
Vous devez vous connecter pour publier un commentaire.
Si vous définissez la
AllowsTransparency
bien sur laWindow
(même sans définir toutes les valeurs de transparence) de la frontière disparaît et vous ne pouvez redimensionner via la poignée.Résultat ressemble à:
J'essaie de créer une fenêtre sans bordure avec
WindowStyle="None"
mais quand je l'ai testé, semble que s'affiche une barre blanche en haut, après quelques recherches il semble être un "Redimensionnement de la frontière", voici une image (je l'ai fait remarquer en jaune):Après quelques recherches sur internet, et beaucoup de difficile non xaml solutions, toutes les solutions que j'ai trouvé le code behind en C# et beaucoup de lignes de code, j'ai trouvé indirectement la solution ici: Maximum de fenêtre personnalisée perd l'effet d'ombre portée
Note : Vous devez utiliser .NET 4.5 cadre, ou si vous utilisez une version plus ancienne utilisation WPFShell, juste de référence de la coque et de l'utilisation
Shell:WindowChrome.WindowChrome
à la place.J'ai utilisé le
WindowChrome
propriété de la Fenêtre, si vous utilisez ce que blanc "redimensionner frontière" disparaît, mais vous avez besoin de définir certaines propriétés pour fonctionner correctement.CaptionHeight: C'est la hauteur de la zone de la légende (headerbar) qui permet pour l'Aero snap, double cliquant sur le comportement normal de la barre de titre ne. Réglez ce paramètre sur 0 (zéro) pour faire les boutons fonctionnent.
ResizeBorderThickness: C'est l'épaisseur de la bordure de la fenêtre dans laquelle vous pouvez redimensionner la fenêtre. J'ai mis 5 parce que j'aime ce nombre, et parce que si vous mettez à zéro il est difficile de redimensionner la fenêtre.
Après l'utilisation de ce code court, le résultat est le suivant:
Et maintenant, la bordure blanche a disparu sans l'aide de
ResizeMode="NoResize"
etAllowsTransparency="True"
, aussi il montre une ombre dans la fenêtre.Plus tard, je vais vous expliquer comment faire fonctionner les boutons (je n'ai pas utilisé les images pour les boutons) facilement avec un simple et court code, Im nouveau et je pense que je peux poster à codeproject, parce que là, je n'ai pas trouvé l'endroit pour poster le tutoriel.
Peut-être il ya une autre solution (je sais qu'il y a de dur et difficile de solutions pour les noobs comme moi), mais cela fonctionne pour mes projets personnels.
Voici le code complet
Merci!
Rectangle_PreviewMouseDown
événement correctement.GlassFrameThickness="0"
à supprimer toute frontière.Alors que l'on a accepté la réponse est très vrai, je veux juste faire remarquer que AllowTransparency a quelques inconvénients. Il ne permet pas à l'enfant les commandes de la fenêtre pour montrer, c'est à dire WebBrowser, et c'est souvent les forces de rendu logiciel qui peut avoir des effets sur les performances.
Il est un meilleur travail autour de même si.
Lorsque vous souhaitez créer une fenêtre sans bordure est redimensionnables et est en mesure d'accueillir un contrôle WebBrowser ou d'un Cadre de contrôle pointu à une URL que vous ne pouvait tout simplement pas, le contenu du dit contrôle de montrer vide.
J'ai trouvé une solution de contournement si, dans la Fenêtre, si vous définissez la WindowStyle à Aucun, ResizeMode à NoResize (ours avec moi, vous serez toujours en mesure de redimensionner une fois fait), alors assurez-vous d'avoir DÉCOCHÉ AllowsTransparency vous aurez une statique de la taille de la fenêtre sans frontière et le contrôle du navigateur.
Maintenant, vous avez probablement vous voulez toujours être en mesure de redimensionner droit? Eh bien, nous pouvons à celle d'un appel d'interopérabilité:
Et voila, UNE fenêtre WPF avec pas de frontière et encore déplaçable et redimensionnable sans perte de compatibilité avec les commandes comme WebBrowser
private enum ResizeDirection { Left = 61441, Right = 61442, Top = 61443, TopLeft = 61444, TopRight = 61445, Bottom = 61446, BottomLeft = 61447, BottomRight = 61448, }
Exemple ici: