locked
Resizing Childwindow RRS feed

  • Frage

  • Hallo alle,

    ich versuche analog dem Beispiel Resizing ChildWindows ein ChildWindow in Silverlight 4 so anzupassen, das die Größe veränderbar ist (das Floatable Window von Tim Heuer wollte ich nicht verwenden).
    Hierzu pack ich das Ganze in einen Canvas und füg an jeder Seite/Ecke des Windows ein Thumb hinzu, damit darüber die Größe des Fensters dann angepasst werden kann. Ich hab das Template des ChildWindows entsprechend angepasst und nun hab ich folgendes Problem, was ich mir noch nicht so recht erklären kann:

    Wenn ich die Animation (ScaleTransform) des ChildWindow auskommentiere (VisualStateManager -> WindowStates -> Open/Closed) dann funktioniert das verändern der Größe an allen Seiten/Ecken des ChildWindows perfekt.

    Sobald aber der VisualStateManager drin ist, dann scheint es so das die Position nicht mehr über Canvas.LeftProperty/Canvas.TopProperty gesetzt werden kann, bzw. bei Änderung das Control dann nicht neu innerhalb des Canvas angeordnet wird... Die Änderung der Breite/Höhe nimmt das Window aber an... sehr komisch!?

    Hat irgendjemand dazu vielleicht ne Idee warum es sich so verhält bzw. was fehlt??

    Unterstützt Silverlight 5 sowas eigentlich dann?

    Gruß
    Jo


    Edit: Leider lässt sich der Style + Code nicht einfügen, es kommt die Fehlermeldung "Text muss 4 bis 60.000 Zeichen lang sein" und dabei war der gesamt Post inkl. Style/Code ~30.000 Zeichen!?

    Hab den ganzen Text + Style/Code als .Txt-Datei mal bei File-upload.net hochgeladen... vlt. kann ja ein Admin das einfügen... thanx!







    Mittwoch, 8. Juni 2011 07:58

Antworten

  • Das Problem ließ sich nicht nur über die Änderungen des Templates lösen. Ich hab nun eine eigene Implementierung des ChildWindows (ResizeableChildWindow) gemacht, mit Orginal-Code vom ChildWindow + meinen Änderungen.

    Das Window kann nun an allen Seiten/Ecken vergrößert werden und besitzt auch ein Size-Grip unten rechts, verhält sich also wie gewöhnliche Fenster (im Gegensatz zur Implementierung von Tim Heuer, welche das gesamte Window zoomed).

    Folgendes wird unterstützt:

    + IsMoveable-Property added
       When set to false the window can't be moved.
    + IsResizeable-Property added
       When set to true, then the window is resizeable and also have a size-grip image on bottom-right.
       MinWidth/MinHeight controls the minimum size, which is always 35 if smaller.
    + HorizontalOffset-/VerticalOffset-Property added
       x-/y-positon where the window should appear. If both set to 0 then the window is centered.
    + Added public property Size, which contains current size, so size could be stored in user storage.
    + Added public property Position, which contains current windows-position, so position could be stored in user storage.
    + ESC-key also closes the window.

    Contact me if you need source-code for the ResizeableChildWindow... (c;
    • Als Antwort markiert Jo0815 Dienstag, 28. Juni 2011 12:15
    Dienstag, 28. Juni 2011 12:13

Alle Antworten

  • ok, vermute mal es liegt daran das dann eine Transformation verwendet wird wenn die Animation am Anfang verwendet wird.

     

    Laut Hilfe:
    Die lokale Position 0,0 für ein Objekt kann auf einer Canvas mithilfe von Canvas.Left und Canvas.Top versetzt werden, dies gilt jedoch nicht als Transformation; das Objekt behält in diesem Fall seine eigene lokale Position 0,0 für Transformationszwecke bei.

    Als nächste Idee hatte ich dann folgendes: ich füg dem Grid "contentRoot" einfach ein weiteres TranslateTransform hinzu und ändere dort dann die X-/Y-Verschiebung. Per XAML definierte Verschiebung funktioniert, aber irgendwie nimmt er diesen Wert nicht an wenn ich das über Code mache. Vermutlich muss ich dem Canvas irgendwie sagen das er seine Children neu anordnen soll.

    Wie bring ich den Canvas dazu die Children neu anzuordnen??

    Donnerstag, 9. Juni 2011 13:42
  • Wenn ich statt einer TranslateTransform bswp. ein ScaleTransform nehmen und den dann vom Code aus ändere geht das ohne Problem... Warum funktioniert aber die Verschiebung mit TranslateTransform nicht, wenn ich das vom Code aus mache?? Hat keiner eine Idee?? hm...
    Freitag, 10. Juni 2011 11:07
  • Das Problem ließ sich nicht nur über die Änderungen des Templates lösen. Ich hab nun eine eigene Implementierung des ChildWindows (ResizeableChildWindow) gemacht, mit Orginal-Code vom ChildWindow + meinen Änderungen.

    Das Window kann nun an allen Seiten/Ecken vergrößert werden und besitzt auch ein Size-Grip unten rechts, verhält sich also wie gewöhnliche Fenster (im Gegensatz zur Implementierung von Tim Heuer, welche das gesamte Window zoomed).

    Folgendes wird unterstützt:

    + IsMoveable-Property added
       When set to false the window can't be moved.
    + IsResizeable-Property added
       When set to true, then the window is resizeable and also have a size-grip image on bottom-right.
       MinWidth/MinHeight controls the minimum size, which is always 35 if smaller.
    + HorizontalOffset-/VerticalOffset-Property added
       x-/y-positon where the window should appear. If both set to 0 then the window is centered.
    + Added public property Size, which contains current size, so size could be stored in user storage.
    + Added public property Position, which contains current windows-position, so position could be stored in user storage.
    + ESC-key also closes the window.

    Contact me if you need source-code for the ResizeableChildWindow... (c;
    • Als Antwort markiert Jo0815 Dienstag, 28. Juni 2011 12:15
    Dienstag, 28. Juni 2011 12:13