Silverlight 2: хотите, чтобы переменное количество элементов занимало фиксированную ширину

StackOverflow https://stackoverflow.com/questions/651464

Вопрос

Панель стека не взаимодействует. У нас есть фиксированная ширина и переменное количество элементов для размещения слева направо.

У нас есть элемент управления элементами, который размещает их на панели стека:

<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 такой компонент, но я видел посты, в которых показано, как его создать.

Например, в блоге Джеффа Уилкокса есть один.

Другие советы

Я, наверное, немного старая школа, но мне нравится делать подобные вещи самому. Вы можете написать небольшой код на бэкэнде, чтобы отбрасывать динамическое число элементов в пространстве (с сеткой), и делать их динамическими по ширине и равномерно распределенными.

Это, вероятно, будет работать так, как вы хотите, и будет настраиваемым.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top