Mehrere Auto-Spaltendefinitionen, die seltsames GridSplitter-Verhalten verursachen

8

Ich habe den folgenden XAML:

%Vor%

Wenn nur ein ColumnDefinition mit einem Width von Auto vorhanden ist, funktioniert GridSplitter ordnungsgemäß. Sobald jedoch mehrere Spalten mit einem Width von Auto vorhanden sind, wird die erste Auto -Spalte ebenfalls vergrößert, wenn GridSplitter verschoben wird (kann in Zelle 1,0 gesehen werden).

Vor der Größenänderung:

Nach der Größenänderung:

Wie kann ich verhindern, dass der GridSplitter die Größe der zweiten Spalte ändert?

    
Zev Spitz 06.03.2017, 12:32
quelle

3 Antworten

5

Wenn Sie die vorhandenen Spalten nicht ändern können, könnten Sie vielleicht versuchen, dieses Verhalten programmgesteuert zu erreichen ...

Benennen Sie die Spalten:

%Vor%

Hinzufügen von Ereignissen zum Grid-Spliter:

%Vor%

Speichern Sie dann die Spaltenbreiten vor dem Ziehen und übernehmen Sie die Änderung auf die erste Spaltenbreite anstatt auf die zweite:

%Vor%     
Nemanja Banda 09.03.2017, 11:52
quelle
2

Ich würde das Layout ändern, um sicherzustellen, dass GridSplitter mit benachbarten Rasterspalten arbeitet:

%Vor%     
ASh 06.03.2017 13:13
quelle
1

Ich habe einige Tests durchgeführt, und ich glaube, dass ich erklären kann, was passiert, auch wenn ich nicht ganz sicher bin, wie ich es beheben kann.

Der Test: Bewegen Sie den Splitter herum und beobachten Sie die relativen Größen von (0,0) und (3,0). Sie sind immer genau gleich.

Fazit: Dieses Verhalten resultiert aus der Tatsache, dass sowohl (0,0) als auch (3,0) * Breite sind, also hat jede von ihnen die Hälfte der verfügbaren Breite. Der Splitter begrenzt jedoch die Größe von (3,0). Da (3,0) eine Grenze für seine Größe hat, aber auch die Hälfte der verfügbaren Breite haben soll, bedeutet dies, dass (0,0) auch die gleichen Größenbeschränkungen wie (3,0) aufweist. Wenn der Splitter (3,0) schrumpft, muss (0,0) auch schrumpfen, um den durch die Breite * angegebenen Anteil beizubehalten. Als Ergebnis sind (1,0) und (2,0) die einzigen Spalten, die wachsen dürfen, um den verbleibenden Raum zu füllen, und da (2,0) nur den Teiler mit einer statischen Breite von 20 enthält (1, 0) wächst, um den verbleibenden Raum zu füllen.

Wie gesagt, ich bin mir nicht sicher, wie ich das beheben soll, aber der erste Schritt zur Behebung eines Problems besteht darin, es zu verstehen. Hoffentlich hilft das jemandem, die Lösung zu finden.

BEARBEITEN: Ein weiterer Test zeigt an, dass das Obige nur wahr ist, wenn (1,0) auf Auto oder Fixed Width eingestellt ist. Wenn (1,0) auf * oder ein Vielfaches von * gesetzt wird, verhalten sich alle * Abschnitte merkwürdig und wachsen und schrumpfen ohne Rücksicht auf ihre angenommenen Proportionen.

EDIT2: Als ich mich umsah, kam ich über diesen Link: Ссылка

Eines der Dinge, die bei diesem Link erwähnt werden, ist das Folgende:

  

Erinnern Sie sich, dass ein GridSplitter in seiner eigenen Spalte und mit seinem   HorizontalAlignment auf "Center" setzt die Größe der Spalten auf beiden Seiten   davon. Im Beispiel unten werden die Spalten 0 und 2 in der Größe geändert, aber der   Breite von Spalte 3 wird nicht geändert.

Das gesamte beobachtete Verhalten in meinen Tests passt zu einem der Beispiele, die bei diesem Link erwähnt wurden. Meine neue Schlussfolgerung ist, dass dieses Verhalten alles absichtlich ist, eher ein seltsamer Bug, wie ich es von Anfang an angenommen habe.

    
Brandon Kramer 10.03.2017 20:35
quelle

Tags und Links