2009-07-20 4 views
0

J'essaie de créer une application WPF (application Windows standard, pas XBAP ou Silverlight). Je souhaite que la fenêtre principale de l'application prenne en charge la transparence et affiche le bureau ci-dessous.Les info-bulles XAML sont en train d'être coupées

Mais lorsque je spécifie un texte d'info-bulle sur un bouton, l'info-bulle apparaît sous (commande z) la fenêtre principale!

J'ai une capture d'écran où: * Une autre application se superpose et bloque la vue de la fenêtre principale partiellement transparente. * L'info-bulle de mon bouton apparaît devant l'autre application. * Lorsque l'info-bulle ne se trouve pas en face de l'autre application, c'est derrière la transparence partielle.

J'ai lu ailleurs que c'est un problème connu avec le moteur WPF pour XP 32 bits et ne se produit pas dans Vista.

Ce que je cherche est un correctif/solution de contournement.

Répondre

0

Ok- est ici ce que j'ai trouvé comme solution de contournement:

Le problème avec les info-bulles disparaît lorsque la fenêtre est également TopMost.

Mais je ne veux pas que ma fenêtre pour être supérieure, donc je ne le fais que lorsque ma fenêtre a le focus clavier:

private void Window_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    this.Topmost = true; 
} 

private void Window_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    this.Topmost = false; 
} 

Puis-je utiliser une liaison pour permettre à chaque info-bulle que lorsque ma fenêtre est Topmost :

ToolTipService="{Binding ElementName=MainWindow, Path=Topmost}" 

Cette option désactive l'info-bulle sauf si elle fonctionne correctement. Je n'ai pas vraiment besoin d'info-bulles quand ma fenêtre n'est pas nette de toute façon. Ce qui est ennuyeux, c'est que la liaison on/off doit être faite sur chaque élément qui définit une info-bulle.

0

Essayez la méthode .SetValue (Canvas.ZIndex, 100) sur l'UIElement souhaité en haut. (J'ai utilisé 100, seulement pour forcer l'élément vers le haut)

+0

Ne fonctionne pas lorsque je n'utilise pas de canevas pour rendre la fenêtre. –

+1

L'utilisation d'un Canvas n'a rien à voir avec le Canvas.ZIndex DependencyProperty (non intuitif comme cela semble) – Janie

0

Ceci est un problème connu de Windows XP et WPF (par exemple, voir ici on Connect).

Vous pouvez éviter le problème par sans utiliser de fenêtre en couches (utilisez-en une avec un cadre). Je pense qu'une autre solution serait de mettre toute la fenêtre TopMost = true, mais pour moi, ce n'est pas une très bonne solution et je ne suis pas sûr à ce sujet.

Je ne sais pas si MS s'attaque à ce problème, car je pense que c'est assez profond dans la couche graphique de XP.

+0

Mon impression est que ce n'est pas du tout le calque graphique XP - il ressemble plus à WPF dessine un second calque de bureau entier au sommet du graphiques XP (Win32) natifs - mais les clips pour adapter où WPF devrait être «visible». C'est ainsi que les premiers accélérateurs de films et de films 3D ont fonctionné s'ils étaient «fenêtrés». –

+0

Eh bien, je ne sais pas. Mais je sais que ce n'est pas juste un problème d'écrêtage. Même si l'info-bulle se trouve entièrement dans la zone de fenêtre WPF, il peut arriver que les info-bulles soient derrière l'application.Vous pouvez le voir avec un outil comme Snoop, ou si l'info-bulle est assez longue pour dépasser les limites de la fenêtre WPF. – dalind

Questions connexes