現在、Column/Rowスパンで事前に計算されたItemの高さと幅の代わりに、VariableGridViewと同様に機能するコントロールを作成しようとしています。 。コントロールの幅を決定する列スパンで。あなたはWIPサンプルhereを見つけることができます。UWPカスタムパネルは、Panel Childrens配置高さに基づいてサイズが変更されました
私が現在持っている唯一の問題は、コントロールの初期ロードです。コントロールがScrollViewer内にあり、その高さがウィンドウ/親の高さを超えると、スクロールしません。以下を参照してください:
私はウィンドウのサイズを変更したら、予想通りただし、スクロールが正常に動作します。以下を参照してください:
見えにくいかもしれませんが、あなたは右側のスクロールバーの暗い部分を見れば、あなたはそれが最初のロード時に正しく自分自身をサイズのいない見ることができます。
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;
}
を、私は私の項目を取るしようとしている高さを計算するにはどうすればよい:
は私がMeasureOverride
方法は、しかし、私は私が間違ってやっているかを見ることができないコントロールでミスを作ってるんだ疑い私のコントロールのサイズを設定する前に?
あなたのアプリをダウンロードした後、私は違いを見ることができます。この問題は、UIのサイズを変更した後で、初期化時に何かを設定し、GetMaxOffsetが常にcontentheightよりも高くなっているために発生します。初期化するときGetMaxOffsetは10ですが、それ以降は元に戻りません。なぜ高さをInfinityにしないのですか? –
残念ながら私は高さを無限にすることはできません。無限であればクラッシュします。 [ここ](https://docs.microsoft.com/en-us/windows/uwp/layout/boxpanel-example-custom-panel)から引用 - 「パネル自体は無限のサイズを返すことはできませんMeasureOverrideからの値で、レイアウト中に例外がスローされます。 – jsmyth886