Silverlight 2: хотите, чтобы переменное количество элементов занимало фиксированную ширину
-
19-08-2019 - |
Вопрос
Панель стека не взаимодействует. У нас есть фиксированная ширина и переменное количество элементов для размещения слева направо.
У нас есть элемент управления элементами, который размещает их на панели стека:
<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. Вы можете указать, что он имеет одну строку и должен располагать все элементы внутри, чтобы иметь одинаковую ширину. Возможно, это не совсем то, что вы ищете, но это самое близкое, о чем я могу подумать.
Я не уверен, предлагает ли Silverlight Toolkit такой компонент, но я видел посты, в которых показано, как его создать.
Например, в блоге Джеффа Уилкокса есть один. р>
Другие советы
Я, наверное, немного старая школа, но мне нравится делать подобные вещи самому. Вы можете написать небольшой код на бэкэнде, чтобы отбрасывать динамическое число элементов в пространстве (с сеткой), и делать их динамическими по ширине и равномерно распределенными.
Это, вероятно, будет работать так, как вы хотите, и будет настраиваемым.