在flex中,将属性设置为相对于另一个属性,但随后丢失连接

时间:2011-05-19 10:33:11

标签: flex flex3

在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)的值,但是却失去了对该事物的连续评估?

1 个答案:

答案 0 :(得分:2)

您可以在事件监听器中为其中一个状态更改事件设置x属性: enterState exitState currentStateChange currentStateChanging 即可。

这是Adobe's documentation

您可以尝试使用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