<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<!--
popup弹出式
Flex framework includes three controls that present hierarchical data in a cascading menu format.
All menu controls can have icons and labels for each menu item,
and dispatch events of the mx.events.MenuEvent class in response to user actions.
You can use the following menu-based controls
flex 包含3个control,每个控制器的子菜单都可以有icon,label,发送事件MenuEvent,响应用户的动作
你可以使用Menu MenuBar PopMenu
-->
<!--
Menu control
A visual menu that can have cascading submenus.
You typically display a menu control in response to some user action, such as clicking a button.
You cannot define a Menu control by using an MXML tag; you must define it, display it, and hide it by using ActionScript
一个menu可以有级联的 子菜单,你现实 a menu 响应用户的某些动作 比如点击一个Button
你不能用mxml 标签(如:<mx:Menu>)这样来定义它,你必须用ActionScript定义它,显示,隐藏
-->
<!--MenuBar control
A horizontal bar of menu items. Each item in the menu bar can have a submenu that displays
when you click the MenuBar item. The MenuBar control is effectively a static (non-pop-up)
menu that displays the top level of the menu as the bar items
一个菜单项的水平Bar ,当你点击这个menuBar中某个item时,在这个MenuBar中的每个item有一个子menu会显示
the MenuBar实际上时一个 静态的Menu (非弹出式)的顶级菜单(实际上是一个顶级菜单)
-->
<!--
PopUpMenuButton control
A subclass of the PopUpButton control that displays a Menu control when you click the secondary button.
The primary button label changes when you select an item from the pop-up menu.
PopUpMenuButton 是PopUpButton的一个字类 (当你点击一个Button)显示一个Menu
当你从一个Pop-up(弹出式)点击一个子项时,这个主要的Button labels会改变?、
-->
<!--Menu MenuBar PopUpMenuButton这些需要数据提供者,所以下边两种方式
Menu items can specify several attributes that determine how the item is displayed and behaves.
Menu items可以指定几个属性来确定这个item的显示和样式 如下array 当 data Provider
如:enabled
groupName:只有对radio有意义,仅对 radio 类型有意义并且是必需的)
用于关联单选组中的单选按钮项目的标识符。如果使用默认数据描述符,
则数据提供程序必须使用 groupNameXML 属性或对象字段来指定此特征。
icon,
label
toggled :指定选择复选项目还是单选项目
type:指定菜单项的类型。有意义的值为 separator、check 或 radio
-->
<!--使用数组当数据提供者
-->
<!--
使用object数组访问一个元素或者标签
To access properties and fields of an object-based menu item, you specify the menu item field name, as follows:
ta1.text = event.item.label
使用xml访问一个元素或者标签
To access attributes of an E4X XML-based menu item, you specify the menu item attribute name in E4X syntax, as follows:
ta1.text = event.item.@label
-->
<mx:Script>
<![CDATA[
import mx.controls.Menu;
// Method to create an Array-based menu.
private function createAndShow():void {
// The third parameter sets the showRoot property to false.
// You must set this property in the createMenu method,
// not later.
var myMenu:Menu = Menu.createMenu(null, menuData, true);
myMenu.show(10, 10);
}
// The Array data provider
[Bindable]
public var menuData:Array = [
{label: "MenuItem A", children: [
{label: "SubMenuItem A-1", enabled: false},
{label: "SubMenuItem A-2", type: "normal"}
]},
{label: "MenuItem B", type: "check", toggled: true},
{label: "MenuItem C", type: "check", toggled: false},
{type: "separator"},
{label: "MenuItem D", children: [
{label: "SubMenuItem D-1", type: "radio",
groupName: "g1"},
{label: "SubMenuItem D-2", type: "radio",
groupName: "g1", toggled: true},
{label: "SubMenuItem D-3", type: "radio",
groupName: "g1"}
]}
];
]]>
</mx:Script>
<!-- Button control to create and open the menu. -->
<mx:Button x="300" y="10"
label="Open Menu"
click="createAndShow();"/>
<!--使用xml对象当数据提供者并且可以指定每个item的icon-->
<mx:Script>
<![CDATA[
// Import the Menu control.
import mx.controls.Menu;
[Bindable]
// [Embed(source="assets/topIcon.jpg")]
public var myTopIcon:Class;
[Bindable]
// [Embed(source="assets/radioIcon.jpg")]
public var myRadioIcon:Class;
[Bindable]
// [Embed(source="assets/checkIcon.gif")]
public var myCheckIcon:Class;
// Create and display the Menu control.
private function createAndShow1():void {
var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
myMenu.labelField="@label";
// Specify the check icon.
myMenu.setStyle('checkIcon', myCheckIcon);
// Specify the radio button icon.
myMenu.setStyle('radioIcon', myRadioIcon);
// Specify the icon for the topmenu items.
myMenu.iconField="@icon";
myMenu.show(10, 10);
}
]]>
</mx:Script>
<!-- Define the menu data. -->
<mx:XML format="e4x" id="myMenuData">
<root>
<menuitem label="MenuItem A" icon="myTopIcon">
<menuitem label="SubMenuItem A-1" enabled="false"/>
<menuitem label="SubMenuItem A-2"/>
</menuitem>
<menuitem label="MenuItem B" type="check" toggled="true"/>
<menuitem label="MenuItem C" type="check" toggled="false"
icon="myTopIcon"/>
<menuitem type="separator"/>
<menuitem label="MenuItem D" icon="myTopIcon">
<menuitem label="SubMenuItem D-1" type="radio"
groupName="one"/>
<menuitem label="SubMenuItem D-2" type="radio"
groupName="one" toggled="true"/>
<menuitem label="SubMenuItem D-3" type="radio"
groupName="one"/>
</menuitem>
</root>
</mx:XML>
<mx:VBox>
<!-- Define a Button control to open the menu -->
<mx:Button id="myButton1"
label="Open Menu"
click="createAndShow1();"/>
</mx:VBox>
<!--Menu samples-->
<!--
Create an instance of the Menu control by calling the static ActionScript Menu.createMenu()
method and passing the method an instance of the data provider that contains the information that
populates the control as the second parameter; for example:
使用静态方法创建,myMenudata是个data Provider
var myMenu:Menu = Menu.createMenu(null, myMenuData);
false是否使用data provider的根节点
var myMenu:Menu = Menu.createMenu(null, myMenuData,false);
-->
<mx:Script>
<![CDATA[
// Import the Menu control.
import mx.controls.Menu;
// Create and display the Menu control.
private function createAndShow2():void {
var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
myMenu.labelField="@label";//xml赋值方式
myMenu.show(10, 10);//在那个坐标点显示
}
]]>
</mx:Script>
<!-- Define the menu data. -->
<mx:XML format="e4x" id="myMenuData2">
<root>
<menuitem label="MenuItem A" >
<menuitem label="SubMenuItem A-1" enabled="false"/>
<menuitem label="SubMenuItem A-2"/>
</menuitem>
<menuitem label="MenuItem B" type="check" toggled="true"/>
<menuitem label="MenuItem C" type="check" toggled="false"/>
<menuitem type="separator"/>
<menuitem label="MenuItem D" >
<menuitem label="SubMenuItem D-1" type="radio"
groupName="one"/>
<menuitem label="SubMenuItem D-2" type="radio"
groupName="one" toggled="true"/>
<menuitem label="SubMenuItem D-3" type="radio"
groupName="one"/>
</menuitem>
</root>
</mx:XML>
<mx:VBox>
<!-- Define a Button control to open the menu -->
<mx:Button id="myButton2"
label="Open Menu"
click="createAndShow2();"/>
</mx:VBox>
<!--Menu Bar samples-->
<!--
Unlike the Menu control, a MenuBar control is static;
that is, it does not function as a pop-up menu,
but is always visible in your application. Because the MenuBar is static, you can define it directly in MXML.
与Menu不同 MenuBar是静态的,它没有作为一个弹出式菜单,他总是显示在你的应用中,因为是静态的,可以之间在mxml中定义
-->
<!--注意
With the <mx:XML> tag you must have a single root node,
and you set the showRoot property of the MenuBar control to false.
(otherwise, your MenuBar would have only the root as a button).
With the <mx:XMLList> tag you define a list of XML nodes, and the top level nodes define the bar buttons.
If your data provider has a label attribute (even if it is called "label"),
you must set the MenuBar control's labelField property and use the E4X @ notation for the label; for example:
使用<mx:XML>你只能有一个根节点,你设置showRoot属性为flase (否则,你只有一个button作为根节点)
使用<mx:XMLList>你定义一个list 根节点, 如果你的数据提供者是有个label属性 即使是"label"
你必须为这个label 设置标签属性和 @表示
-->
<!-- Define the menu; dataProvider is the default MenuBar property.
Because this uses an XML data provider, specify the labelField and
showRoot properties. -->
<mx:MenuBar id="myMenuBar" labelField="@label">
<mx:XMLList>
<menuitem label="MenuItem A">
<menuitem label="SubMenuItem A-1" enabled="false"/>
<menuitem label="SubMenuItem A-2"/>
</menuitem>
<menuitem label="MenuItem B"/>
<menuitem label="MenuItem C"/>
<menuitem label="MenuItem D">
<menuitem label="SubMenuItem D-1"
type="radio" groupName="one"/>
<menuitem label="SubMenuItem D-2"
type="radio" groupName="one"
selected="true"/>
<menuitem label="SubMenuItem D-3"
type="radio" groupName="one"/>
</menuitem>
</mx:XMLList>
</mx:MenuBar>
<!--PopupMenuButton-->
<!--
Unlike the Menu and MenuBar controls, the PopUpMenuButton supports only a single-level menu
与menu,menubar 不同的地方是,它支持只有一级菜单
You define a PopUpMenuButton control in MXML by using the <mx:PopUpMenuButton> tag
可以用mxml标签
-->
<!--
1 When you click the smaller button,
which by default displays a v icon, the control displays a pop-up menu below the button.
2. When you select an item from the pop-up menu, the main PopUpMenuButton button label changes to show the selected item's label and
the PopUpMenuButton control dispatches a MenuEvent.CHANGE event.
3 When you click the main button, the PopUpMenuButton control dispatches a MenuEvent.CHANGE event and a MouseEvent.ITEM_CLICK event
1.如果你按下一个按钮 默认显示一个小图标,显示在弹出式菜单下边???
2如果你从menu选择一个item,这个main PopUpMenuButton label改变,还有the popupMenuButton发出一个MenuEvent.CHANGE事件
3 如果你点击一个主button,popupMenuButton发出一个menuEvent.CHange,和MouseEvent.ItemClick事件
You must use the PopUpMenuButton's creationComplete event, not the initialize event,
to set the main button label from the data provider
所以,你必须使用PopUpmenuButton 的creationComplete事件,不是Application的 初始化事件,设置这个主button,label从 data Provider;
如 Menu(MyPopUpControl.popUp).selectedIndex=2;
-->
<!--使用xml的方式-->
<mx:Script>
<![CDATA[
import mx.controls.Menu
// The initData function sets the initial value of the button
// label by setting the Menu subcontrol's selectedIndex property.
// You must cast the popUp property to a Menu.
private function initData():void {
Menu(pb2.popUp).selectedIndex=2;
}
]]>
</mx:Script>
<mx:XML format="e4x" id="dp2">
<root>
<editItem label="Cut"/>
<editItem label="Copy"/>
<editItem label="Paste"/>
<separator type="separator"/>
<editItem label="Delete"/>
</root>
</mx:XML>
<mx:PopUpMenuButton id="pb2"
dataProvider="{dp2}"
labelField="@label"
showRoot="false"
creationComplete="initData();"/>
<!--使用数组label方式-->
<mx:Script>
<![CDATA[
import mx.events.MenuEvent;
public function itemClickHandler(event:MenuEvent):void {
event.currentTarget.label= "Send to: " + event.label;
}
[Bindable]
public var menuData1:Array = [
{label: "Inbox", data: "inbox"},
{label: "Calendar", data: "calendar"},
{label: "Sent", data: "sent"},
{label: "Deleted Items", data: "deleted"},
{label: "Spam", data: "spam"}
];
]]>
</mx:Script>
<mx:PopUpMenuButton id="p1"
showRoot="true"
dataProvider="{menuData1}"
label="Send to: Inbox"
itemClick="itemClickHandler(event);"/>
</mx:Application>
分享到:
相关推荐
在本文中,我们将深入探讨Flex组件系统,包括其核心概念、组件的使用以及AllMenu.mxml文件可能涉及的内容。 Flex组件是构建用户界面的基本元素,它们是预定义的、可重用的代码单元,可以显示文本、图像、按钮、滑块...
Flex是Adobe公司开发的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序...对于Flex开发者来说,这是一个极好的学习和参考资源,可以深入理解如何在Flex4中创建自定义菜单、皮肤以及数据可视化组件。
总的来说,"flex-menu.rar"是一个关于Flex 4菜单组件的学习资源,对于想要精通Flex 4 UI设计和Flash Builder 4开发的人员来说,这是一个非常有价值的参考资料。通过这个压缩包,你可以了解到如何利用Flex 4的强大...
总的来说,实现Flex中的竖排Menu需要对Flex组件模型、MXML语法以及ActionScript有一定的了解。通过自定义和扩展,我们可以使Flex的UI组件适应各种设计需求,从而创建出更符合用户习惯的交互界面。这个案例展示了Flex...
每个Flex组件都有对应的皮肤类,你可以创建新的皮肤类并覆盖默认皮肤。例如,对于ViewMenu,可以创建一个继承自` HaloViewMenuItemSkin `的自定义皮肤类,并修改其中的图形元素。 3. **图标和图像**:为了改变View...
通过分析`My05_01_小老虎_01_List_Menu`这个文件,我们可以学习到如何在实际项目中应用这些概念,理解`Menu`和`List`组件的使用方式,以及它们在Flex4应用程序中的交互机制。这将有助于提升我们构建用户友好且功能...
《Flex 3 组件实例与应用》是一本针对初学者学习Adobe Flex 3框架及其组件的指南书籍。这本书由作者Dason编写,内容覆盖了Flex 3中的多种组件及其用法,并通过实际案例帮助读者更好地理解和掌握这些组件的应用场景和...
- **Menu**: 下拉菜单组件。 - **MenuBar**: 菜单栏组件,通常位于应用程序顶部。 - **PopUpMenuButton**: 可以弹出菜单的按钮组件。 #### Textcontrols(文本组件) - **Label**: 显示静态文本的组件。 - **...
使用AS3来编写组件皮肤,则需要对Flex组件的内部结构和事件处理有更深入的了解。例如,在编写一个按钮组件的皮肤时,需要知道按钮的不同状态(如正常、鼠标悬停、按下、禁用等),以及在这些状态下组件会触发哪些...
5. **`dropEnabled`**:表示该组件是否可以接收拖拽数据,默认值为`false`。设置为`true`后,组件可以作为拖拽目标。 #### 五、示例:使用Tree组件实现拖拽 下面的代码示例展示了如何使用`Tree`组件来实现拖拽功能...
在Flex中,动态菜单通常使用`mx.controls.Menu`组件来实现。`Menu`组件可以作为下拉菜单或独立的弹出式菜单使用,其功能强大,可定制性强,非常适合创建各种动态菜单。 二、创建基本菜单 创建一个基本的Flex菜单...
以上仅为《Flex 3 组件实例与应用(2009版)》书中部分知识点的概述,该书详细介绍了每一个组件的使用方法、属性、事件以及示例代码,对于希望深入学习和掌握Flex 3开发技术的读者来说,是一本不可多得的实战指南。
4. **基于列表的组件**:Flex提供了多种基于列表的组件,如List、Tree、Menu、TileList、HorizontalList等。这些组件用于以不同的视觉形式展示一组集合的数据。例如,List以垂直列的形式展示数据,而HorizontalList...
5. **Menu Control**:菜单控制是Flex Viewer界面中的一个重要元素,允许用户访问和操作Widgets。菜单的构建和管理也是基于配置文件的。 6. **Flex Viewer 生命周期**:当Flex Viewer启动时,Flash Player加载容器...
- 在Flex组件上,我们可以使用`addMouseListener`方法添加鼠标事件监听器。对于右键点击,我们关注的是`MouseEvent.RIGHT_CLICK`事件。 - 示例代码: ```actionscript myComponent.addMouseListener( new ...
这个库通常包含ActionScript类和其他必要的资源,它们允许你在Flex组件上注册并管理右键菜单。 2. **HTML模板的修改**: 在Flex项目中,你需要修改`html-template/index.template.html`文件。在`<object>`标签内...
总之,“flex自定义多级系统菜单”涉及到的主要知识点有:XML数据绑定、Flex组件(如`Menu`和`MenuBar`)、数据源管理、事件处理以及可能的图形资源加载。通过这些技术,我们可以构建出灵活且易于维护的多级菜单系统...