Silverlight 2: хотите, чтобы переменное количество элементов занимало фиксированную ширину - PullRequest
0 голосов
/ 16 марта 2009

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

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

<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.

Является ли ответом написать специальный подкласс панели, который выделяет равную ширину содержащимся элементам?

Ответы [ 2 ]

1 голос
/ 16 марта 2009

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

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

1 голос
/ 16 марта 2009

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

Я не уверен, предлагает ли Silverlight Toolkit такой компонент, но я видел посты, в которых показано, как его создать.

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

...