Silverlight 2:可変幅のアイテムが固定幅を占めるようにする
-
19-08-2019 - |
質問
stackpanelは協力していません。幅は固定されており、その中に左から右にレイアウトするアイテムの数は可変です。
スタックパネルでレイアウトするアイテムコントロールがあります:
<ItemsControl x:Name="testItems"
HorizontalAlignment="Left"
VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Stacktest:ItemControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
しかし、これはアイテムのサイズを正しく調整しません。利用可能なスペースに関係なく、常に同じサイズです。アイテムが多すぎる場合、すべてが収まるようにサイズ設定されるのではなく、右側で切り取られます。これを実現する方法はありますか?アイテムの数が一定であればグリッドを使用しますが、そうではありません。通常は1〜4アイテムです。
ItemsPanelTemplateが可変数の列を持つグリッドにできると便利です。しかし、ItemsPanelTemplateでそれ(または同じ結果を持つもの)が可能かどうかはわかりません。
含まれるアイテムに等しい幅を割り当てるパネルの特別なサブクラスを作成するのは答えですか?
解決
あなたが欲しいのはUniformGridだと思います。 1つの行があり、すべてのアイテムを同じ幅にレイアウトする必要があることを示すことができます。 これはまさにあなたが探しているものではないかもしれませんが、私が考えることができる最も近いものです。
Silverlight Toolkitがそのようなコンポーネントを提供するかどうかはわかりませんが、その作成方法を示す投稿を見てきました。
たとえば、Jeff Wilcoxのブログには1つがあります。
他のヒント
私はおそらく少し古い学校ですが、この種のことを自分でやるのが好きです。 バックエンドで小さなコードを記述して、動的な数のアイテムをスペースに(グリッドを使用して)ドロップし、それらを動的な幅と均等な間隔にすることができます。
これはおそらくあなたが望むように動作し、調整可能です。