изменить высоту гибкого компонента, чтобы заполнить пространство, доступное на сцене

Я пытаюсь создать макет в Flex с помощью mxml, макет содержит компонент Canvas и Box. Макет всегда должен быть таким, чтобы Box располагался у нижнего края приложения и имел фиксированную высоту, тогда как Canvas заполнял оставшуюся область рабочей области и не перекрывался с Box.

Мой MXML выглядит следующим образом;

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" layout="absolute" clipContent="false" verticalGap="0">
    <mx:Canvas width="100%" height="100%" />

    <mx:Box width="100%" height="30"></Box>
</mx:Module>

Я пробовал использовать динамическую привязку для установки высоты холста (height = "{this.stage.height - 30}"), но это дает неправильные результаты.

Есть ли простой способ добиться того, что я хочу, без установки высоты с помощью ActionScript?


person sixones    schedule 26.06.2009    source источник
comment
Спасибо, ребята, к сожалению, ни одна идея не сработала. Я думаю, что это больше связано с макетом моих модулей и переопределяющими типами Canvas и Box, поскольку, используя приведенные выше примеры, я смог создать образец приложения, которое успешно работало.   -  person sixones    schedule 29.06.2009


Ответы (3)


Я не особо использовал модули, но это работает:

<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    width="100%"
    height="100%"
    >
        <mx:Canvas left="0" right="0" top="0" bottom="0" />
    <mx:HBox 
        width="100%"
        height="50"
        bottom="0"
        >
             ....
    </mx:HBox>
</mx:Application>

Надеюсь, это поможет!

person quoo    schedule 26.06.2009

<Module layout="vertical" xmlns="...">
  <Canvas width="100%" height="100%">
  <HBox width="100%" height="30"/>
</Module>

Установив layout="vertical", Module будет работать более или менее как VBox. Canvas настроен на заполнение 100% по вертикали и горизонтали, но пространство будет оставлено для HBox, потому что у него явная высота.

person Theo    schedule 26.06.2009

Я смог использовать;

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" layout="absolute" clipContent="false" verticalGap="0">
    <mx:Canvas bottom="30" left="0" right="0" top="0" />

    <mx:Box width="100%" height="30"></Box>
</mx:Module>

Это решило мою проблему, так как Canvas заполнил доступное пространство до Box. Если установить для свойства bottom значение 0 на холсте, он расширится за пределы поля и заполнит всю сцену.

person sixones    schedule 29.06.2009