2012-06-18 8 views
9

Ich habe eine Bildbearbeitungsanwendung, und ich habe benutzerdefinierte Adorner, die zu einem AdornerLayer hinzugefügt werden. Wenn der Benutzer auf einen Adorner klickt, möchte ich ihn nach oben bringen - das heißt, wenn er über einen anderen Adorner gezogen wird, möchte ich, dass der erste Klick vom obersten Adorner abgefangen wird.Wie kann man die Z-Reihenfolge von Wpf AdornerLayer Kindern ändern?

Ich kann nicht herausfinden, wie Sie die Z-Reihenfolge der untergeordneten Elemente der AdornerLayer ändern. Es scheint mir nicht möglich zu sein, sie zu sortieren. Selbst wenn ich den Adorner entferne und wieder hinzufüge, wird er nicht ganz oben stehen.

+0

tut die andere (nicht-obersten) Adornern müssen auch die Veranstaltung fangen? –

+0

Nein. Ich möchte, dass der zuletzt angeklickte Adorner zuoberst wird und alle Klicks auf seine sichtbaren Teile zieht. – Sugrue

Antwort

5

Ich hatte ein ähnliches Problem, aber nur eine bestimmte Ordnung meines Adornern benötigt. Ich landete mit Reflexion der Aufträge bis setzen:

var setZOrderMethodInfo = adornerLayer.GetType().GetMethod("SetAdornerZOrder", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);  
setZOrderMethodInfo.Invoke(adornerLayer, new object[] { adorner1, 0 });  
setZOrderMethodInfo.Invoke(adornerLayer, new object[] { adorner2, 1 }); 

von http://social.msdn.microsoft.com/Forums/en/wpf/thread/40bff84e-c4b5-4ea0-87ea-43461df9f24b