2009-12-15 8 views
3

Je suis besoin de faire une fenêtre personnalisée avec WindowStyle.None, AllowsTransparency = true, etc.C# WPF - redimensionnement sur mesure

Une exigence est un contrôle ResizeGrip personnalisé.

Je travaille avec ce ResizeMode.CanResizeWithGrip, en prenant un code à partir d'un projet open source trouvée ici: Fluid Kit

Voir la classe « GlassWindow » si vous êtes intéressé.

Pour faire le travail, j'appelle le code suivant sur l'événement MouseLeftButtonDown du ResizeGrip:

NativeMethods.SendMessage(_interopHelper.Handle, WM.SYSCOMMAND, (IntPtr)((int)SC.SIZE + (int)sizingAction), IntPtr.Zero); 

SizingAction est défini comme:

enum SizingAction 
    { 
     West = 1, 
     East = 2, 
     North = 3, 
     NorthWest = 4, 
     NorthEast = 5, 
     South = 6, 
     SouthWest = 7, 
     SouthEast = 8, 
    } 

Il est tout fonctionne, mais je remarquez une certaine étrangeté lorsque vous redimensionnez via un SouthWest (ou n'importe quel côté gauche ou supérieur). Vous pouvez voir la fenêtre WPF redessiner à la fois pour un changement de taille et de position (qui se produit toujours lors du redimensionnement en haut ou à gauche).

Si vous essayez ceci sur n'importe quelle fenêtre avec le style de fenêtre par défaut et le mode redimensionner, cela fonctionne très bien. À l'exception de XP, vous devez avoir le thème classique sur.

Est-ce que quelqu'un connaît une alternative à l'utilisation de cela? Ou un moyen de le réparer?

J'ai aussi posté des informations sur les forums MSDN, ici: MSDN Forums

PS - Vous pouvez voir ce comportement de première main si quelqu'un veut svn checkout Kit fluide et exécuter l'exemple GlassWindow en définissant StartupUri = "GlassWindow/Window1 .xaml "dans leur exemple de projet.

EDIT: Microsoft m'a dit d'envoyer une suggestion de produit ...

Le lien est ici si quelqu'un a un problème similaire:

Product Suggestions

J'ai aussi mis un exemple ici si vous comme pour essayer de première main:

Sample

+0

Jonathan, j'ai cette étrangeté même si je redimensionne la fenêtre Win32 standard;) ... – Anvaka

+0

Anvaka doit être sur XP, changer votre thème classique pour voir ce que je veux dire. Sur Vista et plus haut, toutes les fenêtres fonctionnent parce qu'elles ont des capacités de rendu plus avancées. Je peux accepter ma fenêtre personnalisée scintillant sur XP, mais ma fenêtre personnalisée ne doit pas scintiller sur Vista et supérieur. – jonathanpeppers

Répondre

8

Microsoft signale cela se produit à tous WPF-gagnant Dow.

Les styles standard fonctionnent car les fenêtres afficheront la barre de titre, la bordure de la fenêtre, etc. Lorsque vous redimensionnez une fenêtre à bordure standard, vous pouvez voir le scintillement de la zone client WPF sur n'importe quelle machine.

Si vous définissez WindowStyle sur Aucun, alors WPF restitue la fenêtre entière et ainsi ce scintillement devient plus visible puisque la fenêtre entière scintille. Pour l'instant, la solution consiste à définir une taille fixe pour votre fenêtre et à redimensionner la zone client. Cependant, cela demande beaucoup de performance - alors vous feriez mieux de vivre avec des scintillements.

Vous pouvez suivre mon lien ci-dessus à ma suggestion de produit pour voir si Microsoft va jamais résoudre ce problème. S'il vous plaît voter pour si vous avez un problème similaire.