[WPF] Wie komme ich an die aktuelle Position des Fensters?
-
Hallo zusammmen,
Ich glaube, dass ich dämlich bin.
Wie komme ich an die aktuelle Position des Fensters?Window.TopundWindow.Leftscheinen nicht dafür geeignet zu sein. Da kommt nur einNaNzurück, was mir verrät, dass anscheinend die "System Default Position" verwendet wird. Aber wie um alles in der Welt komme ich dann an die tatsächlich Position?
Ich will nicht mal die Pixel Position haben, einfach nur in WPF Units die Position des Fensters. Wenn ich per Google&Co suche, dann kommen nur Lösungen über P/Invoke, aber sowas natürliches kann doch echt nicht so schwer sein? Ein GUI ohne eigene Möglichkeit die Position des Fensters zurückzuliefern, das soll wohl ein Witz sein?Grüssli
-
Ok, aktuell habe ich eine eigene Lösung gefunden.
PointToScreen(new Point(0.0, 0.0));
Aber das muss doch einfacher gehen? Vor allem wäre einDependencyObjectdeutlich angenehmer als eine Funktion. Oder muss man das wohl wieder selber implementieren ... *seufz*Grüssli
-
das scheint tatsaechlich nicht zu gehen
ich vermute das es schn recht speziell ist sodass du es selber implementieren musstwofuer brauchst du das ?
die wpf ui ist ja dafuer ausgelegt das alle positionen und groessen dynamisch sein koennen und von den parents behandelt wird
-
Mr Evil schrieb:
das scheint tatsaechlich nicht zu gehen
ich vermute das es schn recht speziell ist sodass du es selber implementieren musstGott, ich hasse das. Jedesmal wenn ich ein einfaches Progrämmchen zum Üben machen will, sind die einfachsten Dinge nicht vorhanden und ich muss sie selber implementieren ...

Mr Evil schrieb:
wofuer brauchst du das ?
Vor ein paar Tagen ist im C++ Bereich jemand aufgetaucht, welcher einen hüpfenden Ball realisieren wollte. Ich dachte: "Hey, geile Idee für eine Übungsaufgabe in WPF. WPF ist ja bekannt für Shaped Formen und ein hüpfender Ball kann man vorerst einfach über eine DoubleAnimation realisieren, welche auf die Top Koordinate des Fensters angewandt wird."
-> WindowStyle=None
-> Background=Transparent
-> Content=Ellipse mit RadialGradientBrush
-> EventTrigger + Animation auf Window.Top -> Crash ... hö??Tjo und so hat dann das Leiden gestartet.

Inzwischen sieht meine Lösung so aus, dass ich mitMouseLeftButtonDowneinDragMovestarte. DerEventTriggerhört aufMouseLeftButtonUpund startet die Animation vonWindow.Top To=0(also nach oben ;)) und inMouseLeftButtonUpPreviewsetzte ichWindow.TopaufPointToScreen(new Point(0.0, 0.0)).YNicht sehr schön, aber immerhin funktioniert das Übungsbeispiel ...

Grüssli