Warum erscheint dieser zusätzliche Platz in einem Gitter?

8

Ich schaute diese Frage an und entdeckte etwas sehr Seltsames: Es scheint, dass die Höhe einer Zeile falsch berechnet wird in einigen Fällen mit Grid.RowSpan .

Hier ist eine einfache Zeichnung von Grid , mit der ich teste:

%Vor%

Und hier ist ein Beispielcode für dieses Grid, der das Problem demonstriert:

%Vor%

Das Endergebnis ist die Höhe der dritten Zeile (Zelle # 2 und # 3) hat viel zusätzlichen Platz darin:

Wenn ich die Grid.RowSpan der ersten und dritten Zelle um +/- 1 anpasse und die Grid.Row für den 2. und 4. um +/- 1 anpasse, um die zusätzliche Zeile zu berücksichtigen, bekomme ich das (richtig ) Ergebnis:

Ich bekomme auch korrekte Ergebnisse, wenn ich genug Elemente aus Zelle # 3 entferne, so dass es in einer einzelnen Zeile wie folgt rendern kann:

Und seltsamerweise führt das Entfernen einiger Objekte dazu, dass nur ein Teil des zusätzlichen Platzes angewendet wird

Ich habe mich mit der Anzahl der Elemente in den Zellen # 1 und # 3 und der Anzahl der Zeilen herumgeschlagen, aber ich kann kein schlüssiges Muster finden, um dieses Verhalten zu erklären.

Was genau macht WPF hinter den Kulissen, wenn dieses Gitter so gerendert wird, dass der zusätzliche Platz erscheint, wenn% code_% auf Zelle 3 steht?

    
Rachel 01.05.2013, 16:02
quelle

3 Antworten

1

Ich habe vor in diese Art der Bedingung ausgeführt wird, wie in meine Frage hier über zusätzlichen Speicherplatz appearing in a ListView

Pro Antwort bekam ich von einem Microsoft-Mitarbeiter:

  

Der Fehler beinhaltet einen Schritt in VSP des Measure-Algorithmus, der die größte Größe jemals entdeckt und zwingt alle künftige Maßnahme ruft zu berichten über eine Größe mindestens so groß ist, erinnert. In Ihrem Fall wird der VSP zunächst gemessen, bevor Trigger ausgelöst werden. Er berechnet die Größe so, als ob alles sichtbar wäre. Wenn das Feuer Auslöser und die Tasten kollabiert, berechnet der Algorithmus die richtige Maßnahme (klein) Größe, aber dann zwingt das Ergebnis wieder groß zu sein.

Das Verhalten des Rasters erscheint dem Verhalten meiner Virtualisieren-Stack-Panel ähnlich: Etwas mit dem los ist RowDefinition 's Measure Anrufe, die sie zwingen, sich zu erinnern und immer eine größere Größe zu berichten, wenn auch später auf der ganzen Linie eine kleinere wäre besser.

Kurz gesagt, haben Sie möglicherweise einen Fehler in WPF, die, weil es unzählige Abhilfen sind (die Summe der Zeilen auf die Gesamt definiert entsprechen benötigt, ordnen Sie Ihre Gitter, was sonst ...) nie die Aufmerksamkeit bekommen kann. Sie können dies nur bestätigen oder widerlegen, indem Sie einen Microsoft Connect-Fehler öffnen und auf ihre Antwort warten.

    
Rob Perkins 13.05.2013 23:00
quelle
0

Ich habe keine vollständige Antwort darauf, warum .NET Ihre dritte Zeile falsch macht.
Aber ich behaupte, dass das, was Sie tun wollen, unlogisch ist, da es keinen Grund gibt, 0,0 zwei Reihen zu überspannen Wenn Zeilen geteilt werden, sind sie wahrscheinlich nicht gleich lang, und WPF muss Länge zu den kürzeren (s) hinzufügen.
In dem Fall, da Sie Zeilen in den freigegebenen Zeilen geteilt haben, muss WPF eine gewisse Gewichtung anwenden und tut das nicht richtig Wenn Sie nicht 0 0 spannen, dann teilt das extra Extra-Leerzeichen mit Zeile 0 Spalte 0 und Zeile 1 Spalte 0 gleichermaßen, was (für mich) die richtige Antwort ist.

%Vor%     
paparazzo 02.05.2013 16:25
quelle
0

Wie Rob schon sagte, ist dies wahrscheinlich ein Fehler in WPF-Messaufrufen. Also ich kenne deine Antwort nicht. Aber um das Innenleben von WPF-Apps zu erkunden, benutze ich Snoop . Es ist ein großartiges Werkzeug, ähnlich den Browser-Tools, die HTML-Elemente zeigen, Snoop zeigt Ihnen, wie Ihr WPF-Formular angelegt ist, verschachtelte Elemente, Eigenschaften von Elementen usw. Es hilft mir sehr, wenn ich Layoutprobleme herausfinden will. Ich dachte, ich würde es erwähnen.

    
Tombala 14.05.2013 15:52
quelle

Tags und Links