2009-04-13 4 views
2

Also habe ich meine eigene Karussellsteuerung in WPF gemacht. Ich bin über einen Fehler gestolpert und habe mich gefragt, ob jemand wüsste, wie ich das beheben könnte, wie zum Beispiel einen Methodenaufruf oder eine Reihe von Methodenaufrufen oder ein Workaround. Hier ist ein Druckbild von meinem Karussell:WPF: Canvas Z-Index Fehler

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

Wie man deutlich mit diesem Bild sehen kann, mein Mauszeiger über die Schaltfläche mit 16 darauf geschrieben. Aber der Knopf mit 18 darauf ist der, der blau ist, als ob meine Maus über diesem Knopf wäre. Ich habe auch festgelegt, dass der Tooltip an den Inhalt gebunden ist und der Tooltip sagt, dass meine Maus über dem Button mit 18 ist. Dies sollte das richtige Verhalten sein, da 18 der Z-Index-Wert der Schaltflächen ist. So sollte der Knopf mit 18 auf der Oberseite des Knopfes mit 16 drauf sein. Allerdings hat WPF die Leinwand nicht so dargestellt und ich habe mich gefragt, wie ich das überwinden könnte. Ich versuchte canvas.InvalidateArranage(), canvas.invalidateVisual(), canvas.UpdateLayout(), aber ich hatte kein Glück. Die linke Seite des Canvas zeigt, wie es aussehen sollte, aber die rechte Seite liefert nicht das gleiche Ergebnis, obwohl die Z-Index-Werte korrekt sind, und selbst dieser Screenshot beweist, dass dies ein Fehler in WPF ist.

+1

Können Sie einige Quellcode zur Verfügung stellen? Es könnte ein Fehler in WPF oder Ihrem Code sein. Ohne den Code ist es nur Hörensagen. – kevindaub

+0

Ich könnte Quellcode für Sie produzieren, aber es wäre das ganze Steuerelement selbst, da das Z-Index-Zeug nicht an einem Ort ist. – Nick

+1

Einverstanden. Hier gibt es nicht genug, um weiterzumachen. Bitte fügen Sie etwas Code hinzu. –

Antwort

5

in WPF, technisch Ihre Maus über 18. Die Art und Weise die Ereignisse (können) ausgelöst werden, wird wie folgt:

ich über „16“ bin, rufen Sie die Mouseover für 16 Ich bin über " 18 ", rufen Sie den Mouseover für 18

Seit 18 wurde zuletzt aufgerufen, es ist ausgewählt (wieder, nur meine Vermutung).

Für den Fall, args für die mousemove- Ereignis (Ich gehe davon aus mousemove-), stellen Sie sicher, e.Handled = true gesetzt, auf diese Weise es nur einmal verarbeitet