J'ai une fenêtre qui n'a pas de barre de titre ( Y a-t-il un moyen pour moi de faire la fenêtre intessible sans se débarrasser du cadre de la fenêtre? P>
J'ai lu la question Activer le verre Vista Effet sur une fenêtre WPF sans bordure em> , mais ce n'est pas tout à fait ce que je veux - je voudrais garder la frontière de la fenêtre. Pour un exemple de ce que je voudrais ressembler à ma fenêtre, appuyez sur Alt + Tab avec Aero activé. P>
Pour clarifier, Je ne veux pas que les curseurs de redimensionnement se présentent forts> du tout en planant sur la bordure de la fenêtre. C'est essentiellement ce que je veux que ma fenêtre ressemble à: p>
La solution ne doit pas nécessairement être strictement du WPF - je vais bien avec le piratage avec l'API Win32 afin d'y parvenir. P> windowstyle == windowstyle.none code>). La fenêtre entière utilise l'effet de verre Aero. Lorsque je fais la fenêtre sans désisisable (
resizemode == resizemode.noresize code>), l'effet de verre disparaît et mes commandes accrochent juste en midair. (Essentiellement, la fenêtre elle-même disparaît mais laisse son contenu.) P>
4 Réponses :
Un moyen pirateux de le faire serait de définir les propriétés Minwidth / MaxWidth et Minheight / MaxHeight pour le rendre efficacement irréfléchi. Bien sûr, le problème vous trouverez toujours les curseurs de redimensionnement sur les frontières. P>
Eh bien tout le point est de se débarrasser des curseurs de redimensionnement afin que cela ne vous aide pas, malheureusement.
Pourquoi ne pas simplement créer cette fenêtre de la fenêtre pour la fenêtre? Il utilise un décalage pour définir les couleurs de la fenêtre. Donc, un moyen facile est juste d'envelopper une bordure entièrement autour de votre fenêtre et de votre propre couleur, vous obtenez vos propres couleurs! P>
Un quand je veux dire envelopper autour d'une fenêtre, je veux dire envelopper fondamentalement
Mais alors je ne peux pas faire correspondre au thème actuel de l'utilisateur. Je pourrais faire une frontière personnalisée qui ressemble exactement au thème Aero par défaut, mais si l'utilisateur l'a personnalisé (ou utilise un thème différent), la fenêtre ne correspondrait pas.
Je ne jette pas cette réponse, cependant, je peux finir par devoir faire cela.
Eh bien ... si vous voulez des couleurs personnalisées. Pourquoi ne liez-vous pas simplement le décalage et laissez-vous sélectionner les couleurs de l'utilisateur? Si vous utilisez l'approche MVVM, dans votre modèle de vue, définissez une chaîne avec le code de couleur et liez-le du décalage, cela ne fonctionnerait-il pas?
Et si vous voulez que quelque chose puisse changer en fonction des coups de vue. faire une propriété qui fait ceci: Public Void OnKeyChanged (Expéditeur d'objet, KeyboarderEventargs e) {if (eley = onglet && e.key = alt) {itestColor = "blanc"} eletierColor = bleu (mais utilisez des codes de couleur)}}}}}}
Ce n'est pas mon point. Je souhaite que la fenêtre correspond au thème actuel de l'utilisateur. Donc, s'ils utilisent un thème Aero noir personnalisé comme Ce , Je veux que la fenêtre ressemble aussi à ça. Faire passer l'utilisateur à traverser la création de leur propre thème de la fenêtre qui ne correspondent même pas parfaitement à leur choix que leur choix est inacceptable et que la fenêtre soit codée dur pour utiliser le style Aero par défaut (comme compromis) est un sous-par solution (bien que je puisse avoir à recourir à cela).
Pourquoi ne pouvez-vous pas utiliser le support intégré de WPF? E.G., une dynamicresource à SystemColors code>? ( msdn.microsoft.com/en-us/Library/... )
Vous pouvez accrocher le WNDProc et intercepter le wm_windowposchangeing < / a> message. Pas strictement du WPF, mais probablement votre meilleur pari. P>
Si vous souhaitez masquer les curseurs de redimensionnement, votre meilleur pari est d'intercepter
Vous auriez toujours les curseurs de redimensionnement et OP a dit (dans un autre commentaire) que ceux-ci sont indésirables.
Travaillé comme un charme! Merci! Profitez de 275 plus de représentant plus :)
Basé sur la réponse ESICS.
p>
Je vais donner la réponse à Eric pour être juste, car il a publié l'idée, mais merci pour l'exemple de travail. :)
C'est pourquoi je l'ai mentionné. Je voulais juste voir si je pouvais le faire fonctionner.
DefwindowProc n'est-il pas appelé dans tous les cas cependant? Dans ce code, vous appelez uniquement la fonction d'origine si le MSG est WM_NCHITTTEST. J'imagine que pour faire le remplacement correctement, tout autre message doit simplement renvoyer le résultat donné par la fonction d'origine.
Cela ne fonctionne pas bien. Une bordure blanche est ajoutée au cadre intérieur de la fenêtre. C'est bien si vous utilisez un fond blanc, mais sinon cela ne fonctionnera pas.
@Ed S. Dans le gestionnaire d'événements Mainwindow_Load, changez que les marges de 10 à 12 déplacent la bordure sous la zone de la fenêtre du WPF, la cachent efficacement.