Ich versuche herauszufinden, warum WPF nicht verrückt wird, wenn ich ein Fenster auf die Größe des Inhalts einstelle und dann den Inhalt auf den verfügbaren Platz einstelle ... Irgendeine Idee?Wie löst WPF die zyklische abhängige Dimensionierung?
Antwort
Es gibt zwei Durchgänge im Layoutsystem - messen und anordnen.
Zuerst in der Maßnahme Pass jedes Kind ist eine vorgeschlagene verfügbare Größe gegeben, und dies propagiert den Baum hinunter. Dies legt die Eigenschaft DesiredSize
jedes Kindes fest.
In der nächsten, Arrange-Pass, wird die DesiredSize
berücksichtigt, aber das Elternteil hat das letzte Wort darüber, wie viel tatsächliche verfügbare Größe es einem Kind geben wird, und die Eltern legt jedes Kind entsprechend, informiert es tatsächliche Größe wird es, und so weiter den Baum hinunter.
Auch mehrere erdenkliche Ecke Fälle betrachten:
- Das Kind verlangt
double.Infinity
gewünschte Größe: ausdrücklich nicht erlaubt, löst eine Ausnahme - Das Kind seinen
HorizontalAlignment
setzt auf „Stretch“: die Eltern nicht bietet unendliche tatsächliche Größe - Fenster auf
SizeToConent
, Kind auf „Stretch
“, keine andere Einschränkung gesetzt:- Fenster bieten erstes unendliche Maß Größe
- Kind die Größe von ihren Kindern (Textbreite, Ränder, etc.) gemessen verlangt - nicht unendlich Größe
- Ordnen: Fenster setzt auf ein systemdefinierte Minimum seine Größe oder nach Wunsch von Kind, je nachdem, was größer ist (kann nicht unendlich sein)
- Das Kind streckt die Größe in vorherigem Schritt
- Fenster bieten erstes unendliche Maß Größe
Es ist nicht so schwierig: Wenn das Fenster so eingestellt ist, dass es an seinen Inhalt angepasst wird, hat es keine statische Größe und nimmt daher Standardmaße an. Wenn Sie den visuellen Baum herunterfahren, möchte das Steuerelement das Fenster ausfüllen, um es zu füllen. Es erzwingt keine Dimensionen, sondern akzeptiert die Größe des Fensters (die Standardgröße).
Meine Vermutung ist, dass Elemente immer eine Größe haben (Standard ist, wenn keine über ihnen in der Hierarchie angegeben) und die Erwähnung, ob diese Größe fest oder verhandelbar ist.
Ich rate nur hier, aber es ist nur um zu beweisen, dass die Situation nicht so schlimm ist, wie es scheint. Mit einer guten Update-Strategie können die Elemente in einer vernünftigen Weise in Bezug aufeinander eingestellt werden.
Ok bestimmt passen. Ich habe gerade einen weiteren Test mit einer Textbox gemacht. Wenn ich Text hinzufüge, dehnt sich das Fenster aus, um den Inhalt aufzunehmen. Der Inhalt zwingt also eine Dimension. Was passiert in diesem Fall? – subb
Was kann passieren, ist, dass die TextBox die Größe ändern darf, und das Fenster ist so eingestellt, dass dies erlaubt. In diesem Fall gibt es keine Schleife mehr, da die TextBox einige Dimensionen hat, die sie erhalten möchte, nämlich die Größe des Inhalts - nicht mehr mit der Größe des Fensters verbunden. Die Änderung in den Dimensionen schreitet den visuellen Baum hinauf, und das Fenster ist auch dazu bereit, durch die Größenänderung zu arbeiten. Dies bewirkt nicht, dass die Größe der TextBox erneut geändert wird. –
- 1. Wie löst man zyklische Beziehungen in SQL?
- 2. Wie löst man abhängige Konflikt einer SBT Dependecy?
- 3. Angehängte oder abhängige Eigenschaft für ValidationRule WPF
- 4. WPF - Cascading ComboBoxen, abhängige Updates nicht
- 5. UWP Element Dimensionierung
- 6. Zyklische Redundanzprüfung, wie?
- 7. JavaFX GridPane automatische Dimensionierung
- 8. WPF-Benutzersteuerelement löst Entwurfszeitausnahme aus
- 9. ngDialog Positionierung und Dimensionierung
- 10. Asterisk PIAF Dimensionierung Hardware
- 11. Zyklische Abhängigkeiten
- 12. Problem zyklische Enum-Klassenwerte
- 13. Zyklische Abhängigkeitsproblem
- 14. Dynamische Dimensionierung eines VBA-Arrays?
- 15. Warum löst die WPF IsCancel-Funktionalität auf dem 'A' Key
- 16. Wie kompilieren und voneinander abhängige Plugin-Jars ausführen
- 17. WPF Window.Close() löst kein UserControl.Unloaded Ereignis aus
- 18. WPF-Stil löst auf einem TreeView aus?
- 19. WPF UserControl löst NullReferenceException beim Laden
- 20. Core Animation ... zyklische Animationen?
- 21. MVC SQL zyklische Kaskadenpfade
- 22. Zyklische Abhängigkeit mit Ninject
- 23. generieren unveränderliche zyklische Datenstrukturen
- 24. Wie wird die zyklische Indizierung einschließlich negativer Werte implementiert?
- 25. Abhängige Formularauswahl
- 26. Zyklische Listen in F #
- 27. zyklische Diashow in Android
- 28. zyklische Vererbung mit
- 29. Zyklische Abhängigkeit der Elementinitialisierung
- 30. Abhängige Typen
Schön erklärt. – Stimul8d
Ja, danke. Für andere habe ich http://msdn.microsoft.com/en-us/library/ms745058.aspx gelesen und Refactor verwendet, um den tatsächlichen WPF-Code zu betrachten. – subb
'Willkommen. Du meinst * Reflektor *, oder? :) –