[WPF] Wie komme ich an die aktuelle Position des Fensters?


  • Administrator

    Hallo zusammmen,

    Ich glaube, dass ich dämlich bin.
    Wie komme ich an die aktuelle Position des Fensters? Window.Top und Window.Left scheinen nicht dafür geeignet zu sein. Da kommt nur ein NaN 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


  • Administrator

    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 ein DependencyObject 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 musst

    wofuer brauchst du das ?

    die wpf ui ist ja dafuer ausgelegt das alle positionen und groessen dynamisch sein koennen und von den parents behandelt wird


  • Administrator

    Mr Evil schrieb:

    das scheint tatsaechlich nicht zu gehen
    ich vermute das es schn recht speziell ist sodass du es selber implementieren musst

    Gott, 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 mit MouseLeftButtonDown ein DragMove starte. Der EventTrigger hört auf MouseLeftButtonUp und startet die Animation von Window.Top To=0 (also nach oben ;)) und in MouseLeftButtonUpPreview setzte ich Window.Top auf PointToScreen(new Point(0.0, 0.0)).Y

    Nicht sehr schön, aber immerhin funktioniert das Übungsbeispiel ... 🙂

    Grüssli


Anmelden zum Antworten