【发布时间】:2011-07-27 03:38:34
【问题描述】:
我有一个窗口,我想在其中添加/删除组件并根据状态相应地调整窗口大小。但由于某种原因,它忽略了第一次调整大小。 这是一个示例代码
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="450"
minHeight="355"
currentState="{stateBox.selected ? 'one' : 'two'}"
currentStateChange="handleStateChange(event.oldState, event.newState)">
<fx:Script>
<![CDATA[
private function handleStateChange(oldState:String, newState:String):void
{
if (oldState == "two") {
width -= 341;
minWidth = 450;
} else {
width += 341;
minWidth = 791;
}
}
]]>
</fx:Script>
<s:states>
<s:State name="one" />
<s:State name="two" />
</s:states>
<s:Rect id="rect1" top="0" left="0" right="0" right.two="341" bottom="0" >
<s:fill>
<s:SolidColor color="0xDDDDDD" />
</s:fill>
</s:Rect>
<s:Rect id="rect2" top="0" bottom="0" width="341" right="0" includeIn="two" >
<s:fill>
<s:SolidColor color="0x000000" />
</s:fill>
</s:Rect>
<s:CheckBox id="stateBox" label="change state" />
</s:WindowedApplication>
想法是当状态变为'two'时,我想添加rect2来显示并增加窗口的minWidth和大小。当状态变为“一”时,我想从显示中删除 rect2 并调整窗口大小。这似乎有效,除了第一次状态从“二”变为“一”时窗口不会缩小,但之后会按预期工作。我不确定为什么我第一次减小宽度时会忽略它。我也尝试直接更改 nativeWindow.bounds ,但这也不起作用。
最初我只是尝试根据状态设置 minWidth (minWidth.one="450 minWidth.two="791") 但这会导致窗口在左侧增长并在右侧收缩,从而导致窗口在状态发生变化时向左移动. 所以我只是在状态改变时将窗口向右移动,但这会导致一些我不想要的闪烁。
有人知道为什么会发生这种情况吗?还是解决我的问题的好方法?
【问题讨论】:
-
调整大小后是否尝试调用
validateNow()或validateDisplayList()? -
是的,我尝试同时调用
validateNow()和validateDisplayList(),但它不起作用。奇怪的是,它只忽略了对width -= 341的第一次调用,但后续调用工作正常。
标签: apache-flex flex4