2010-05-25 2 views
1

je la disposition imbriquée suivante dans un dojo 1.4 application:Dojo enfants StackContainer ne sont pas Redimensionnement sur maximize navigateur/restauration

BorderContainer 1

-> Stack Container 1

-> - -> BorderContainer 2

-> -> BorderContainer 3

Le StackContainer est dimensionné avec une largeur et une hauteur de 100%. Lorsque je redimensionne la fenêtre du navigateur à l'aide de la commande Agrandir/Restaurer, le StackContainer se redimensionne correctement dans la zone centrale de son parent BorderContainer. Le problème que j'ai est que les enfants de StackContainer (BorderContainer 2 et 3) ne sont pas redimensionnés au contentBox du StackContainer.

Y a-t-il quelque chose de spécial que vous devez faire pour forcer un redimensionnement des enfants StackContainer? J'ai essayé d'appeler StackContainer1.resize() mais cela ne fait aucune différence.

Merci d'avance.

Informations complémentaires:

Merci pour la réponse Peller. La hiérarchie de widgets qui contient le StackContainer est en fait un widget personnalisé, donc le StackContainer n'est pas directement dans un BorderContainer, mais sa hauteur et sa largeur sont explicitement définies à 100%. Cela fonctionne et le StackContainer est redimensionné correctement sur le navigateur maximiser. Les enfants directs du stackcontainer sont BorderContainers et ce sont ces BorderContainers qui ne sont pas redimensionnés lorsque le StackContainer est redimensionné. Le balisage est exacte:

<div dojoType="dijit.layout.StackContainer" style="height:100%;width:100%;"> 
    <div dojoType="dijit.layout.BorderContainer" gutters="false" style="height:100%;width:100%;padding:0;" id="bcWrongSize"> 
    </div> 
</div> 

Il est le BorderContainer « bcWrongSize » qui ne soit pas redimensionnée avec le StackContainer parent. La hauteur et la largeur indiquées sur BorderContainer sont remplacées par des dimensions de pixels explicites par StackContainer. Toutefois, lors du redimensionnement du navigateur, le StackContainer est correctement redimensionné à son widget parent, mais la hauteur et la largeur explicites du BorderContainer sont incorrectes. Incedentally, la méthode de disposition sur StackContainer est appelée et redimensionne le BorderContainer (étant l'enfant visible). Toutefois, les dimensions _contentBox qu'il transmet au BorderContainer sont les dimensions de StackContainer AVANT son redimensionnement. La largeur et la hauteur calculées par dojo.marginBox sont incorrectes (offsetWidth et offsetHeight sont les dimensions d'avant que le navigateur ne maximise). Peut-être que ce problème est dû au fait que le StackContainer est le subContainerWidget d'un widget personnalisé et est donc dimensionné avec une largeur et une hauteur de 100%?

+0

La largeur et la hauteur ne doivent pas être spécifiées sur la zone centrale d'un BorderContainer, seulement les côtés/haut/bas. Si votre StackContainer est au centre, supprimez la largeur/hauteur et voyez si cela fait une différence. Oui, il devrait redimensionner le StackContainer et les enfants automatiquement. Vous avez probablement d'autres choses dans vos BorderContainers? – peller

+0

Merci pour la réponse peller. J'ai ajouté des informations supplémentaires ci-dessus. – Andy

Répondre

3

Nous avons eu un problème similaire sur un projet. Voici l'extrait qui a fonctionné pour nous. Notez l'utilisation de la région pour le stackContainer (c'est dans un bordercontainer) et le manque de hauteur/largeur sur les conteneurs de bordure intérieure.

<div dojotype="dijit.layout.StackContainer" jsid="buttonStack" region="bottom" style="height: 180px"> 
     <div jsid="selectionButtons" dojotype="dijit.layout.BorderContainer" gutters="false"> 
      <div dojotype="dijit.layout.ContentPane" region="bottom"> 
       <button id="btnClearSelection" dojotype="dijit.form.Button" 
        label="Clear Selection" disabled> </button> 
       <button id="btnClearAll" dojotype="dijit.form.Button" 
        label="Clear All" disabled> </button> 
      </div> 
     </div> 
<div> 
Questions connexes