Si vous définissez ResizeMode="CanResizeWithGrip"
sur un WPF, Window
une poignée de redimensionnement est affichée dans le coin inférieur droit, comme ci-dessous:
Si vous définissez WindowStyle="None"
également la barre de titre disparaît mais le bord biseauté gris reste jusqu'à ce que vous définissiez ResizeMode="NoResize"
. Malheureusement, avec cette combinaison de propriétés définie, la poignée de redimensionnement disparaît également.
J'ai remplacé les Window
s ControlTemplate
via une coutume Style
. Je veux spécifier moi-même la bordure de la fenêtre et je n'ai pas besoin que les utilisateurs puissent redimensionner la fenêtre des quatre côtés, mais j'ai besoin d'une poignée de redimensionnement.
Quelqu'un peut-il détailler un moyen simple de répondre à tous ces critères?
- Ne pas avoir de bordure en
Window
dehors de celle que je me précise dans unControlTemplate
. - Ayez une poignée de redimensionnement fonctionnelle dans le coin inférieur droit.
- N'a pas de barre de titre.
la source
Réponses:
Si vous définissez la
AllowsTransparency
propriété surWindow
(même sans définir de valeurs de transparence), la bordure disparaît et vous ne pouvez redimensionner que via la poignée.Le résultat ressemble à:
la source
J'essayais de créer une fenêtre sans bordure avec
WindowStyle="None"
mais quand je l'ai testé, il semble qu'une barre blanche apparaisse en haut, après quelques recherches, il semble que ce soit un "Redimensionner la bordure", voici une image (j'ai remarqué en jaune):Après quelques recherches sur Internet et de nombreuses solutions non xaml difficiles, toutes les solutions que j'ai trouvées étaient du code en C # et beaucoup de lignes de code, j'ai trouvé indirectement la solution ici: la fenêtre personnalisée maximale perd l'effet d'ombre portée
Remarque : vous devez utiliser le framework .NET 4.5, ou si vous utilisez une version plus ancienne, utilisez WPFShell, référencez simplement le shell et utilisez à la
Shell:WindowChrome.WindowChrome
place.J'ai utilisé la
WindowChrome
propriété de Window, si vous l'utilisez, la "bordure de redimensionnement" blanche disparaît, mais vous devez définir certaines propriétés pour fonctionner correctement.CaptionHeight: Il s'agit de la hauteur de la zone de légende (barre d'en-tête) qui permet le comportement d'accrochage Aero, double-clic comme le fait une barre de titre normale. Réglez-le sur 0 (zéro) pour que les boutons fonctionnent.
ResizeBorderThickness: Il s'agit de l'épaisseur au bord de la fenêtre où vous pouvez redimensionner la fenêtre. Je mets 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 avoir utilisé ce code court, le résultat est le suivant:
Et maintenant, la bordure blanche a disparu sans utiliser
ResizeMode="NoResize"
etAllowsTransparency="True"
, elle montre également une ombre dans la fenêtre.Plus tard, j'expliquerai comment faire fonctionner les boutons (je n'ai pas utilisé d'images pour les boutons) facilement avec un code simple et court, je suis nouveau et je pense que je peux poster sur codeproject, car ici je n'ai pas trouvé l'endroit pour publier le tutoriel.
Peut-être qu'il y a une autre solution (je sais qu'il y a des solutions dures et difficiles pour les noobs comme moi) mais cela fonctionne pour mes projets personnels.
Voici le code complet
Je vous remercie!
la source
Rectangle_PreviewMouseDown
correctement l'utilisation de l' événement.Bien que la réponse acceptée soit très vraie, je tiens simplement à souligner que AllowTransparency a quelques inconvénients. Il ne permet pas aux contrôles de fenêtre enfant de s'afficher, c'est-à-dire WebBrowser, et il force généralement le rendu logiciel qui peut avoir des effets négatifs sur les performances.
Il y a un meilleur travail autour cependant.
Lorsque vous souhaitez créer une fenêtre sans bordure redimensionnable et capable d'héberger un contrôle WebBrowser ou un contrôle Frame pointé vers une URL que vous ne pouvez tout simplement pas, le contenu dudit contrôle apparaît vide.
J'ai trouvé une solution de contournement cependant; dans la fenêtre, si vous définissez WindowStyle sur None, ResizeMode sur NoResize (supportez-moi, vous serez toujours en mesure de redimensionner une fois terminé), puis assurez-vous que vous avez UNCHECKED AllowsTransparency, vous aurez une fenêtre de taille statique sans bordure et affichera le contrôle du navigateur.
Maintenant, vous voulez probablement toujours pouvoir redimensionner correctement? Eh bien, nous pouvons faire cela avec un appel d'interopérabilité:
Et voilà, une fenêtre WPF sans bordure et toujours déplaçable et redimensionnable sans perdre la compatibilité avec des contrôles comme WebBrowser
la source
private enum ResizeDirection { Left = 61441, Right = 61442, Top = 61443, TopLeft = 61444, TopRight = 61445, Bottom = 61446, BottomLeft = 61447, BottomRight = 61448, }
Échantillon ici:
la source
J'avais du mal à obtenir la réponse de @ fernando-aguirre en utilisant
WindowChrome
pour travailler. Cela ne fonctionnait pas dans mon cas car je remplaçaisOnSourceInitialized
dans leMainWindow
et n'appelais pas la méthode de classe de base.Cela m'a laissé perplexe pendant très longtemps.
la source