2009-07-23 4 views
0

Я использую настраиваемый элемент для отображения списка фотографий и должен знать, как управлять шириной. На данный момент он делает это:Предельная ширина пользовательского списка itemrenderer в Flex

Why so wide? http://tdwright.co.uk/phpplayground/test_tom/img/flex_problem1.png

Который, как я уверен, вы согласитесь, глаз bleedingly некрасиво.

Список создается следующим образом:

<mx:Panel width="100%" height="100%" layout="absolute" title="Photos"> 
    <mx:List x="0" y="0" width="100%" height="100%" id="photoList" dataProvider="{photos}" itemRenderer="thumbnails" rowHeight="100"/> 
</mx:Panel> 

И компонент ItemRenderer выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Image source="{data.src}" id="image" scaleContent="true" toolTip="{data.caption}" height="100%" horizontalAlign="center"/> 
</mx:VBox> 

Я попытался размещение ширина = "100%" в целой куче мест , но безуспешно. Если кто-нибудь знает, как я могу контролировать это, я был бы очень благодарен.

+0

Этот вопрос имеет более 2 тыс. Просмотров и более 2 лет, но до сих пор не получил ответа. Это стало неуместным? (Я отказался от использования Flex.) Должен ли я предлагать ему щедрость? –

ответ

1

Если установить эти свойства внутри ItemRenderer verticalScrollPolicy = «выключено» horizontalScrollPolicy = «выключено» стержни исчезли

Я не знаю, почему они выбирают для грозный «выкл» вместо ложных

+0

Это скрывает полоски, но не ограничивает ширину, что почти делает ее хуже. Спасибо за ваш ответ. –

+0

какая ширина вы хотите ограничить? вы можете установить maxWidth внутри itemrenderer, если знаете, сколько места вам нужно для отображения содержимого. Вы даже можете получить ширину родительского (tileList или что-то еще) и установить его как ширину. Существует много решений для этой проблемы. – Arno

+0

maxWidth, похоже, не работает, но мне было бы интересно увидеть ответ, основанный на другом предложении. –

0

Несколько наблюдений здесь, на основе миазмы подобных болезненных переживаний. (Предостережение: я не создал тестовое приложение, чтобы подтвердить все здесь для данного конкретного случая)

Предполагая, что вы хотите, чтобы список имел размер своей ширины в зависимости от размера элементов itemRenderer, которые он содержит, эти элементы itemRenderer необходимо предоставить информацию о ширине. Использование VBox таким образом с разрешенными полосами прокрутки означает, что VBox попытается «разрешить» между размером содержимого (Image) и размером родителя. Так что да, первое, что нужно сделать, это отключить полосы прокрутки на VBox, предполагая, что вы не можете просто избавиться от VBox вообще. (Я предполагаю, что вы хотите использовать VBox, чтобы вы могли поместить заголовок или что-то под изображением в качестве следующего шага)

Список, который вы указали, имеет размер 100% от его родителей, панель , который сам по себе составляет 100% от своего родителя. Вместо того, чтобы размер этих элементов «сверху вниз», подумайте о том, чтобы их ширина была не определена, чтобы Flex вычислил их требуемую ширину снизу вверх. Используйте maxWidth в списке или панели, чтобы ограничить их размер, если вам нужно их разложить по сравнению со своими сверстниками.

Другая важная вещь, о которой нужно знать, это трюк «minHeight = 0». Оказывается, алгоритм калибровки, используемый Flex, ведет себя совершенно по-другому, когда minHeight или minWidth установлен на что-то иное, чем NaN по умолчанию. Устанавливать его на 0 очень полезно во многих из этих случаев. Попробуйте minWidth = 0 на VBox и/или в списке.

0

В дополнение к отключению политики прокрутки установите слева и справа на 0. Это должно привязать ширину к ширине родительского элемента.

Смежные вопросы