2009-04-13 8 views
2

J'ai donc fait mon propre contrôle carrousel dans WPF. Je suis tombé sur un bug et je me demandais si quelqu'un savait comment je pouvais résoudre ce problème comme un appel de méthode ou une série d'appels de méthodes ou de travail. Voici un écran d'impression de mon carrousel:WPF: Canvas Z-Index Bug

Carousel Image http://img4.imageshack.us/img4/9599/carousele.jpg

Comme vous pouvez le voir avec cette CLAIREMENT l'image, mon pointeur de la souris est sur le bouton avec 16 écrit sur elle. Mais le bouton avec 18 écrit dessus est celui qui est bleu comme si ma souris était sur ce bouton. J'ai également mis l'info-bulle pour être lié au contenu et l'info-bulle indique que ma souris est sur le bouton avec un. Cela devrait être le comportement CORRECT comme 18 est la valeur z-index des boutons. Ainsi, le bouton avec 18 doit être sur le dessus du bouton avec 16 dessus. Cependant, WPF n'a pas rendu la toile d'une telle manière et je me demandais comment surmonter cela. J'ai essayé canvas.InvalidateArranage(), canvas.invalidateVisual(), canvas.UpdateLayout() mais je n'ai pas eu de chance. Le côté gauche de la toile montre à quoi il devrait ressembler, mais le côté droit ne produit pas le même résultat même si les valeurs de l'index z sont correctes, et même cette capture d'écran prouve que c'est un bug dans WPF.

+1

Pouvez-vous fournir un code source? Cela pourrait être un bug dans WPF ou votre code. Sans le code, c'est juste un ouï-dire. – kevindaub

+0

Je pourrais produire le code source pour vous, mais ce serait tout le contrôle lui-même puisque le truc z-index n'est pas tout en un seul endroit. – Nick

+1

D'accord. Il n'y a pas assez ici pour continuer. S'il vous plaît ajouter du code. –

Répondre

5

En WPF, techniquement votre souris sur 18. La façon dont les événements (peuvent) être déclenchées est la suivante:

Je suis sur « 16 », appelez le 16 mouseover Je suis sur " 18 ", appelez le mouseover pour 18

Depuis 18 était le plus récemment appelé, il est sélectionné (encore une fois, juste ma conjecture).

Dans les args d'événements pour l'événement mousemove (je suppose mousemove), assurez-vous de mettre e.Handled = true, cette façon, il est seulement une fois traitée