none
WPF Resizing im StackPanel mit GridSplitter oder ... ?? [VS 2010] RRS feed

  • Frage

  • Hallo miteinander,

    ich bin etwas verwirrt. Ich habe ein TabItem, auf dem ich einen ScrollViewer plaziert habe. Darin befindet sich ein auf vertikal eingestelltes StackPanel in welchem ich dynamisch RTF-Boxen untereinander einfüge. So weit, so gut und funktionsfähig. Jetzt möchte ich gerne jede RTF-Box individuell in ihrer Höhe mit einem Splitter verändern können. Das gelingt mir jedoch nicht richtig. Muss ich jetzt in dem StackPanel wieder Grids einfügen, in die dann RTF-Box(en) und Splitter kommen oder kann man das irgenwie direkt im StackPanel realisieren? Oder mache ich das alles viel zu kompliziert und man könnte das ganze auch wesentlich kompakter hinbekommen?

    Danke für euer Hilfe

    Gruss Carsten

    Freitag, 3. Dezember 2010 17:38

Antworten

  • Du  musst den den GridSplitter noch per Grid.SetColumn(mGridSplitterInitSource, 0) oder Grid.SetRow(mGridSplitterInitSource,0) setzen.

    • Als Antwort markiert CarstenDD Dienstag, 14. Dezember 2010 15:37
    Montag, 13. Dezember 2010 18:27
    Beantworter
  • Hola Carsten!

    Musst ihmo nur die Grid.Row bzw Grid.Column setzen, je nach ResizeDirection.
    Sollte zwischen den zu resizenden Elementen liegen.

    Also in Deinem Beispiel  z.B. RTF1 in Grid.Row = 0, dann GridSplitter auf Grid.Row=1
    und RTF2 in Grid.Row = 2, analog mit Columns bei
    GridResizeDirection.Columns.
    In Code-Behind natürlich mit Grid.SetRow(...) u. Grid.SetColumn(...)
    arbeiten.

    Bissl Info auch hier: How to: Resize Rows with a GridSplitter

    Christoph

    • Als Antwort markiert CarstenDD Dienstag, 14. Dezember 2010 15:37
    Dienstag, 14. Dezember 2010 06:46

Alle Antworten

  • Mit einem GridSplitter kannt du die Zellen in ihrer Größe zur Laufzeit verändern.

    Evtl. kannst du die gewünschte Funktionalität mit Adornern umsetzen.

     

    Montag, 6. Dezember 2010 12:58
    Beantworter
  • Hallo ClassMP2002,

    das hilft mir nicht wirklich weiter. Adorner helfen nicht, da alles zur Laufzeit stattfindet und nicht im Designmodus. Das mit den GridSplittern funktioniert ja gerade nicht so, wie ich mir das vorstelle, darum ja auch meine Frage, wie man das richtig macht.

    Gruss Carsten

    Montag, 13. Dezember 2010 16:32
  • Also wie der Name sagt:
    der GridSplitter ist füs Resizen im Grid gedacht
    Im StackPanel kann er seine Fähigkeiten
    eher suboptimal zur Geltung bringen ;-)

    Solltest das Stackpanel also durch ein Grid
    ersetzen um user-seitige Resizen zu ermöglichen

    Christoph

    Montag, 13. Dezember 2010 16:43
  • Hallo Christoph,

    das mit dem Scrollen funktioniert mit dem Scrollviewer. Ich füge zwar den Splitter in einer eigenen Zeile ein, aber sehen kann ich ihn trotz Angabe einer Höhe von 5 nicht.

        mGridSplitterInitSource.Name = "GridSplitterInitSource" + sTabIndex + sRowIndexInit
        mGrid.RegisterName(mGridSplitterInitSource.Name, mGridSplitterInitSource)
        mGridSplitterInitSource.ResizeDirection = GridResizeDirection.Rows
        mGridSplitterInitSource.HorizontalAlignment = Windows.HorizontalAlignment.Stretch
        mGridSplitterInitSource.VerticalAlignment = Windows.VerticalAlignment.Center
        mGridSplitterInitSource.Height = 5
        mGridSplitterInitSource.ResizeBehavior = GridResizeBehavior.PreviousAndNext
    

    Wie aber stellt man bei dynamischer Erzeugung den Splitter- und das Gridverhalten so ein, dass beide wissen, was sie zu tun haben, wenn der Anwender den Splitter bewegt? Obiger Code reicht ganz offensichtlich nicht aus.

    Danke für alle sachdienlichen Hinweise
    Gruss Carsten

    Montag, 13. Dezember 2010 17:41
  • Du  musst den den GridSplitter noch per Grid.SetColumn(mGridSplitterInitSource, 0) oder Grid.SetRow(mGridSplitterInitSource,0) setzen.

    • Als Antwort markiert CarstenDD Dienstag, 14. Dezember 2010 15:37
    Montag, 13. Dezember 2010 18:27
    Beantworter
  • Hola Carsten!

    Musst ihmo nur die Grid.Row bzw Grid.Column setzen, je nach ResizeDirection.
    Sollte zwischen den zu resizenden Elementen liegen.

    Also in Deinem Beispiel  z.B. RTF1 in Grid.Row = 0, dann GridSplitter auf Grid.Row=1
    und RTF2 in Grid.Row = 2, analog mit Columns bei
    GridResizeDirection.Columns.
    In Code-Behind natürlich mit Grid.SetRow(...) u. Grid.SetColumn(...)
    arbeiten.

    Bissl Info auch hier: How to: Resize Rows with a GridSplitter

    Christoph

    • Als Antwort markiert CarstenDD Dienstag, 14. Dezember 2010 15:37
    Dienstag, 14. Dezember 2010 06:46
  • Hallo Christoph,

    danke, das wars. Entscheidend ist natürlich, dass man weiss, wie man richtig von 0 aufwärts zählt! Damit hatte ich ein paar Schwierigkeiten ;-)

    Gruss Carsten

    Dienstag, 14. Dezember 2010 15:37