Ich versuche derzeit, ein Steuerelement zu erstellen, das ähnlich wie eine VariableGridView, aber statt Höhen und Breiten vorberechnet mit Spalten/Zeilen überspannen, würde der Inhalt die Elemente Höhe steuern . Mit einer Spaltenspanne, die die Steuerbreite bestimmt. Sie können ein WIP-Beispiel finden.UWP Custom Panel Größe basierend auf dem Panel Children's Höhe angeordnet
Das einzige Problem, das ich derzeit habe, ist die anfängliche Belastung des Steuerelements. Wenn sich das Steuerelement in einem ScrollViewer befindet und seine Höhe die Höhe des Fensters/Parents überschreitet, wird nicht gescrollt. Siehe unten:
Doch sobald ich die Größe des Fensters, das Scrollen richtig funktioniert wie erwartet. Siehe unten:
es schwierig sein könnte, um zu sehen, aber wenn man sich den dunkleren Teil der Scrollbar auf der rechten Seite können Sie sehen, es selbst nicht richtig auf dem Anfangslast bemessen.
Ich vermute, ich mache einen Fehler bei den Kontrollen MeasureOverride
Verfahren jedoch kann ich nicht sehen, was ich falsch mache:
protected override Size MeasureOverride(Size availableSize) {
// Need to use this method LimitUnboundedSize as when within a
// ScrollViewer an infinite height is supplied within the availableSize
var desiredSize = LimitUnboundedSize(availableSize);
UpdateColumnOffsets();
foreach (var child in Children) {
child.Measure(desiredSize);
}
return desiredSize;
}
private Size LimitUnboundedSize(Size input) {
if (Double.IsInfinity(input.Height)) {
var scrollViewer = this.FindAscendant<ScrollViewer>();
var contentHeight = scrollViewer.ViewportHeight.Equals(0)
? Window.Current.Bounds.Height : scrollViewer.ViewportHeight;
input.Height = (contentHeight >= GetMaxOffset ? contentHeight :
GetMaxOffset);
}
return input;
}
Wie kann ich die Höhe meiner Einzelteile gehen berechnen nehmen bevor ich die Größe meines Controls festlege?
ich die Differenz nach Ihrer App herunterladen sehen können. Das Problem liegt daran, dass Sie beim Initialisieren etwas gesetzt haben und das GetMaxOffset immer höher ist als die Inhaltshöhe, nachdem Sie die Benutzeroberfläche geändert haben. Bei der Initialisierung wird GetMaxOffset auf 10 gesetzt, danach wird es jedoch nicht mehr auf das Original zurückgesetzt. Warum lässt man nicht einfach die Höhe als Infinity? –
Leider kann ich nicht zulassen, dass die Höhe unendlich ist, sie wird abstürzen, wenn sie unendlich ist. Zitat aus [hier] (https://docs.microsoft.com/en-us/windows/uwp/layout/boxpanel-example-custom-panel) - "Das Panel selbst kann jedoch keine Größe mit einer unendlichen Zahl zurückgeben Wert von MeasureOverride, der während des Layouts eine Ausnahme auslöst. " – jsmyth886