代码之家  ›  专栏  ›  技术社区  ›  Hamid

在flex 4中编程启用/禁用菜单栏按钮

  •  4
  • Hamid  · 技术社区  · 14 年前

    我的flex4(air)项目中有以下XML定义了菜单界面的开始:

    <mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)">
        <mx:dataProvider>
        <s:XMLListCollection>
        <fx:XMLList xmlns="">
            <menu label="File">
                <item label="New"/>
                <item label="Load"/>
                <item label="Save" enabled="false"/>
            </menu>
            <menu label="Help">
                <item label="About"/>
            </menu>
        </fx:XMLList>
        </s:XMLListCollection>
        </mx:dataProvider>
    </mx:MenuBar>
    

    我正在试图找到一种语法,在文件被加载后,通过单击“加载”,我可以将“保存”按钮设置为“启用=真”,但是我无法确定语法,请有人提出建议。

    当前检测按钮单击的方法是通过开关/案例测试menuevent.item@label的字符串结果。也许这不是最好的方法?

    2 回复  |  直到 12 年前
        1
  •  5
  •   Hamid    14 年前

    回答我自己的问题…又一次。我正在做的事情是什么?似乎没人愿意回答????

    不管怎样,这里是:

    结果发现,由于菜单栏是用XML定义的,而且完全是任意的,这完全取决于您决定如何定义菜单,在我的例子中,根据上面的菜单XML,更改“已启用”按钮状态的语法如下。

    menubarXML.item.(@label=="Save").@enabled = "true";
    

    其中,EnubarXML是一个包含xmlList的xmlListCollection,我分别重新定义了它。

    [Bindable]
            public var menuBarCollection:XMLListCollection;
    
            private var menubarXML:XMLList =<>
                <menu label="File">
                    <menuitem label="New" data="1A"/>
                    <menuitem label="Open" data="1B"/>
                    <menuitem label="Save" data="1C" enabled="false"/>
                </menu>
                <menu label="Help" data="2A">
                    <menuitem label="About" data="2A"/>
                </menu>
                </>;
    

    然后在应用程序创建完成时调用此函数:

    private function initCollections():void {
                menuBarCollection = new XMLListCollection(menubarXML);
            }
    

    当然,菜单栏的XML定义(根据需要进行自定义):

    <mx:MenuBar id="myMenuBar" labelField="@label" itemClick="menuChange(event)" dataProvider="{menuBarCollection}"/>
    

    希望有人发现我劳动的成果有用。

        2
  •  0
  •   Martin Gamulin    14 年前
    private var actions : Object = {
        mi_new : mi_new,
        mi_open : mi_open
    };
    
    protected function myMenuBar_itemClickHandler(event:MenuEvent):void
    {
        actions[event.item.@action]();
    }
    
    private function mi_new() : void {
        // do new stuff
    }
    
    private function mi_open() : void {
        // do open stuff
    }
    
    private var menubarXML:XMLList =<>
        <menu label="File">
            <menuitem label="New" data="1A" action="mi_new"/>
            <menuitem label="Open" data="1B" action="mi_open"/>
            <menuitem label="Save" data="1C" enabled="false"/>
        </menu>
        <menu label="Help" data="2A">
            <menuitem label="About" data="2A"/>
        </menu>
        </>;