标签: mxml

Flex 4:构建具有背景的组

我正在尝试构建一个简单的组件,将spark.components.Group扩展为具有背景颜色,更具体地说是一个spark.primitives.Rect组件,它被拉伸以填充背景.

这就是我到目前为止所提出的:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo"
    <fx:Metadata>
        [DefaultProperty(name="content")]
    </fx:Metadata>

    <s:Rect id="background" width="100%" height="100%">
        <s:fill>
            <s:SolidColor color="#990000"/>
        </s:fill>
    </s:Rect>

    <s:Group id="container"/>

    <s:filters>
        <!-- For good measure ;) -->
        <s:DropShadowFilter color="#000000" strength="0.4" blurX="5" blurY="5" distance="2" angle="90"/>
    </s:filters>

    <fx:Script>
        <![CDATA[
            public function set content(value:Array):void {
                this.container.mxmlContent = value;
            }
        ]]>
    </fx:Script>
</s:Group>
Run Code Online (Sandbox Code Playgroud)

好的,所以这里的逻辑基本上是有道理的,对吧?在MXML中声明的所有子项都转到名为"container"的组中.这工作得很好.但是,当我运行下面的示例时,布局完全是fubar.

<s:VGroup>
    <!-- This is the component described above -->
    <components:MessageContainer id="component" width="100" height="100"/>
    <mx:Slider/>
    <mx:Slider/>
    <mx:ColorPicker/>
</s:VGroup>
Run Code Online (Sandbox Code Playgroud)

这就是它的样子:

flex fubar http://i34.tinypic.com/s4p0tz.jpg

这里有什么我想念的吗?也许我需要覆盖一种方法?

apache-flex mxml actionscript-3 gumbo flex4

6
推荐指数
1
解决办法
1万
查看次数

actionscript addChild首先需要显示对象

解:

如果你有同样的问题,addElement()而不是addChild()就是这样做的


我正试图从mxml转移到actionsctipt.我有一个<s:Rect>我已创建并设置其属性,但无法添加它.

var aRect:Rect = new Rect();
//set properties like aRect.x, aRect.y, aRect.width, aRect.height

//tried adding it various ways
addChild(aRect);
Application.addChild(aRect);
Application.application.addChild(aRect);
stage.addChild(aRect);
Run Code Online (Sandbox Code Playgroud)

但我一直得到错误 1067:类型spark.primitives的值的隐式强制:Rect到不相关的类型flash.display:DisplayObject

最初是在mxml中,它内部<s:Application>没有嵌套在任何内容中

<s:Application>

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%">
         //then fill code here, removed for readability
    </s:Rect>

</s:Application>
Run Code Online (Sandbox Code Playgroud)

什么是交易,我认为actionscript会比mxml更好.

apache-flex adobe actionscript mxml flex4

6
推荐指数
1
解决办法
3908
查看次数

我为什么要使用MXML?

如果一切都可以在MXML中完成可以也可以在ActionScript中完成,并且在ActionScript(循环,条件等)中更容易实现许多事情,为什么要花时间学习MXML?

我在这一点上的最佳理由是MXML的结构很好地匹配UI组件的可视层次结构,并且初始化UI的代码行减少了.另一方面,真实世界的UI通常是动态的,实现为一个简单的静态结构,然后根据运行时条件动态填充(在这种情况下,UI更新仍在ActionScript中).通过创建一些辅助方法,还可以减少ActionScript所需的SLOC.

apache-flex actionscript mxml actionscript-3

5
推荐指数
2
解决办法
2441
查看次数

Flex Type Coercion,我认为这是精神上的

我基本上有一节课:

public class WindowEvent extends Event
{
    public static const WARNEVENT:String = "warnEvent";
    public static const TASKREQEVENT:String = "taskRequestEvent";
    public static const TASKANNOUNCE:String = "taskAnnounce";
    public static const WINDOWCHANGE:String = "windowChange";
    public static const ILLEGALPOSITION:String = "illegalPosition";

    // insert brevity   
}
Run Code Online (Sandbox Code Playgroud)

前四个事件工作正常,但我只是添加ILLEGALPOSITION并尝试了这个:

    // inside Window.as
    private function checkDimensions():void {
       if(!Window._legalBoundaryEnable)
           return;
...    var pass:Boolean = Window.legalBoundary.containsRect(
455        this.getBounds(stage));
456    if(!pass) {
457        this.dispatchEvent(new WindowEvent(WindowEvent.ILLEGALPOSITION,
...           "Illegal Position etc."));
       }
    }
Run Code Online (Sandbox Code Playgroud)

所以当我点击调度方法时,Flex会向我发出这个堆栈:

TypeError: Error #1034: Type Coercion failed: cannot …

apache-flex flash mxml actionscript-3

5
推荐指数
1
解决办法
845
查看次数

如何将TextArea高度设置为其内容高度

我有一个mx:TextArea,我希望它的高度与其内容高度相同.没有什么特别的 - 只是一个不可编辑的文本区域和文本.我需要一种简单可靠的方法来使控件适合并显示所有文本而不需要垂直滚动 - 就像自动调整大小一样.此外,我的控件的文本将只设置一次,不会更改,因为它不可编辑.

<mx:TextArea id="myTextArea"
             editable="false"
             width="100%"
             verticalScrollPolicy="off" >
   <mx:text>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id lorem 
      quis ante pulvinar auctor at eget risus. Nulla facilisi. Morbi ultricies 
      dignissim lorem, quis suscipit felis ullamcorper et.
   </mx:text>
</mx:TextArea>
Run Code Online (Sandbox Code Playgroud)

还有一个后在这里对同一话题,但因为设置有很多更复杂,因为它包括造型和约束力是与我无关.

apache-flex mxml flex4

5
推荐指数
1
解决办法
1万
查看次数

如何将MXML子节点放在自定义Flex 4组件中?

以下是自定义组件的示例.它只是一个带有标题标签和近距离图像(X)的框:

<?xml version="1.0"?>
<mx:Canvas ... >
    <s:VGroup>
        <s:Label text="(HEADING TEXT)" ... />

        (INSTANCE MXML)

    </s:VGroup>
    <mx:Image ... />
</mx:Canvas>
Run Code Online (Sandbox Code Playgroud)

在MXML文档中使用组件时,我希望将"(HEADING TEXT)"替换为参数(应该很简单)以及"(INSTANCE MXML)",其中包含多个标签,文本输入,复选框,等等(也许更难).

我找到了这个基于脚本的方法,但如果存在,我想要一个更清晰的编译时解决方案.有什么建议?

apache-flex mxml custom-component

5
推荐指数
2
解决办法
3815
查看次数

如何以声明方式将spark State的name属性设置为字符串变量值

我有以mxml声明的spark状态.我也有一个字符串常量的类.我希望我的状态名称匹配字符串常量.是否可以直接在mxml中执行此操作以及如何执行此操作?我不想使用相同的字符串,我想将name属性设置为常量的值.

码:

public static const create:String = 'create';
public static const edit:String = 'edit';
Run Code Online (Sandbox Code Playgroud)

MXML:

<s:State name="new"/>
<s:State name="edit"/>
Run Code Online (Sandbox Code Playgroud)

据我所知,状态名称需要在编译时处理,所以可能不可能.

apache-flex mxml actionscript-3

5
推荐指数
1
解决办法
431
查看次数

如何将MXML文件内嵌到另一个MXML文件中?

我想在MXML文件中包含一个MXML文件,就像使用include指令在AS3中包含外部文件一样.使用include伪指令在编译时将外部文件中的代码放入原始文件中,并将其置于同一范围内.

例如,

Application.mxml:

<Application>

    <source="external.mxml"/>

</Application>
Run Code Online (Sandbox Code Playgroud)

External.mxml:

<Styles/>

<Declarations>
    <Object id="test"/>
</Declarations>
Run Code Online (Sandbox Code Playgroud)

我需要将此代码/ mxml/xml保留在原始范围内的外部文件中.不要问我为什么要这样做.

另一个例子.这是我当前的代码(简化)全部在1 mxml文件中:

...

File1.mxml
<Button click="clickHandler()"/>

<Script>
public function clickHandler():void {

}
</Script>
Run Code Online (Sandbox Code Playgroud)

...

这就是我想要的:

...

File1.mxml
<Group>

    <source="File2.mxml"/>

    <Button click="clickHandler()"/>

<Group>


File2.mxml
<Script>
public function clickHandler():void {
    trace(this); // File1.mxml
}
</Script>
Run Code Online (Sandbox Code Playgroud)

...

我想将我的代码拆分成一个单独的文件......

~~ 更新 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~

虽然不是我要求使用"代码隐藏"方案,但实现了将代码从视图中分离出来的部分功劳.因此,我创建了一个MXML文件,MyGroup.mxml或MyGroup.as,并扩展了包含clickHandler代码的Group.

这个方法的问题是我被锁定到我正在扩展的类类型,硬编码视图.因此,例如,如果我要拆分为单独文件的MXML类是Group,则必须扩展Group.

我已经完成了这项工作的项目,但并不好.人们开始在类后面的代码中设置样式和可视方面或组/查看特定属性,如果我们需要更改它或布局,我们最终将所有这些依赖项放到容器中.它变得一团糟.另外,使用Code Behind,您无法重用它(重用方式包括styles.as被重用).所以这不是一个解决方案,但我想我会提到它.

这是一个示例背后的代码,

MyGroupBehind.mxml:

<Group>

   <Script>
   public function clickHandler():void {
       trace(this); // File1.mxml
   }
   </Script>

</Group>
Run Code Online (Sandbox Code Playgroud)

MyGroupAhead.mxml:

<MyGroupBehind>

    <Button click="clickHandler()"/>

</MyGroupBehind>
Run Code Online (Sandbox Code Playgroud)

apache-flex mxml flex4

5
推荐指数
1
解决办法
3869
查看次数

Flex条件编译MXML?

在Flex中,现在可以使用-define编译器选项来执行各种很酷的操作.在我的程序中,我使用的选项使得我的一些代码被这样的块排除:

CONFIG::FACEBOOK{
   //Some code
}
Run Code Online (Sandbox Code Playgroud)

而且效果很好.

如何使用MXML获得类似的行为?

我想做同样的事情,但是以这种方式省略/包括MXML标签,而不是AS代码块.

apache-flex mxml conditional-compilation actionscript-3 flex4.5

5
推荐指数
1
解决办法
1764
查看次数

如何在ActionScript 3.0中在运行时更改Label的颜色?

我收到以下错误:

1119: Access of possibly undefined property color through a reference with static
type mx.controls:Label.
Run Code Online (Sandbox Code Playgroud)

关于这一点的是,在MXML中,color是Label的一个属性.但如果我试着说:

lblUpgrade.color = "#000000";
Run Code Online (Sandbox Code Playgroud)

它抛出了这个错误.我一直试图找到最后45分钟的解决方法.我怎样才能在运行时设置它?谢谢!

label mxml actionscript-3

5
推荐指数
2
解决办法
7541
查看次数