在Flex 3.0中,我创建了一个具有可拖动窗口的状态(由其他人编写的CollapsableTitleWindow代码,但这无关紧要)。
然后,我创建了一个新的视图状态,它稍微重新定位了窗口。
<mx:State name="newstate" basedOn="firststate">
<mx:SetProperty target="{window1}" name="width" value="50%"/>
<mx:SetProperty target="{window2}" name="x" value="{window1.width + 5}"/>
我希望在加载时将一个窗口放在另一个窗口旁边,但是当用户拖动第一个窗口时,我不希望第二个窗口移动。
如何在加载时将x绑定到(window1.width + 5)的值,但是却失去了对该事物的连续评估?
答案 0 :(得分:2)
您可以在事件监听器中为其中一个状态更改事件设置x属性: enterState , exitState , currentStateChange 或 currentStateChanging 即可。
您可以尝试使用enterState事件的事件处理程序:
protected function window1_enterStateHandler(event:FlexEvent):void
{
window1.percentWidth = 100;
}
<强>更新强> 来自Tominator的评论如下:
Alert.show('before: ' + window1.width.toString() + ' pixels, ' + window1.percentWidth.toString() + '%');
window1.percentWidth = 50;
Alert.show('after: ' + window1.width.toString() + ' pixels, ' + window1.percentWidth.toString() + '%');
结果是我得到了输出:
之前:458.022705像素,NaN%
之后:458.022705像素,50%
您可能需要在设置window1.validateDisplayList()
属性后尝试拨打validateNow()
或percentWidth
。