[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.Top
undWindow.Left
scheinen nicht dafür geeignet zu sein. Da kommt nur einNaN
zurü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 einDependencyObject
deutlich 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 mitMouseLeftButtonDown
einDragMove
starte. DerEventTrigger
hört aufMouseLeftButtonUp
und startet die Animation vonWindow.Top To=0
(also nach oben ;)) und inMouseLeftButtonUpPreview
setzte ichWindow.Top
aufPointToScreen(new Point(0.0, 0.0)).Y
Nicht sehr schön, aber immerhin funktioniert das Übungsbeispiel ...
Grüssli