在Flex当中,如果父类已经拥有了子元素,然后你再继承这个父类,并且在子类当中也定义了mxml的标签元素,那么将会只显示子类的mxml标签元素而不会显示父类的mxml标签元素。
当然你可以重写createChildren方法,然后把你要显示的子元素以代码形式添加,这样绝对可以把父类的元素全部继承下来。但是为什么写标签形式就不行呢?
我们仔细窥探一下,发现用mxml标签形式写的时候,flex会把这些标签放通过 mxmlContent的set方法放到一个数组中,然后在createChildren的时候把这个数组中的元素一个一个加到显示列表中。
如果你的子类继承了父类,而且子类也定义了mxml标签,那么当初始化子类的时候,也会调用mxmlContent的方法,这样的话就会把父类的保存父类标签的数组冲掉,导致只会现实子类的标签了。
明白了这些,那我就直接贴代码了。
App:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:Vgroup="com.view.Vgroup.*"> <s:layout> <s:VerticalLayout/> </s:layout> <Vgroup:ChildVGroup2/> <Vgroup:ChildVGroup/> </s:Application>ChildVGroup:
<?xml version="1.0" encoding="utf-8"?> <Vgroup:ParentVGroup xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:Vgroup="com.view.Vgroup.*"> <fx:Script> <![CDATA[ override protected function createChildren():void { var currentMxmlContent:Array = super.mx_internal::getMXMLContent(); var allMxmlContentArray:Array = mxmlContentArray.concat(currentMxmlContent); mxmlContent = allMxmlContentArray; super.createChildren(); } ]]> </fx:Script> <s:Button label="tv3"/> <s:Button label="tv4"/> <s:Button label="tv5"/> <s:Button label="tv6"/> </Vgroup:ParentVGroup>
ChildVGroup2 和 ChildGroup 一样,只是button的label不一样,以此来区别。
ParentVGroup:
<?xml version="1.0" encoding="utf-8"?> <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ public var mxmlContentArray:Array;//在加载类的时候,第一次会加载Parent的容器的child(例如v1,v2),然后放到这个数组中。 //在默认的实现当中,如果parent的子类也有child,那么就会覆盖这个数组。所以我们要先把parent的child的保存起来。 override public function set mxmlContent(value:Array):void { super.mxmlContent = value; if(!mxmlContentArray) { mxmlContentArray = value; } } ]]> </fx:Script> <s:Button label="v1"/> <s:Button label="v2"/> </s:VGroup>
相关推荐
在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...
标题"父类统一修改控件值"所指出的问题,就是一种通过面向对象编程来提高代码复用性和可维护性的方法。这种做法可以避免在每个窗体类中重复编写相同的代码,降低代码冗余,提高效率。 首先,我们需要创建一个基类...
总的来说,理解并熟练掌握JavaScript的继承机制对于进行控件开发至关重要,它可以帮助我们构建出可扩展、可维护的代码结构,提升代码复用性,从而提高开发效率和应用质量。通过深入学习和实践,开发者可以创建出各种...
在一个asp.net项目中,用户自定义控件是很经常使用的,一个项目中一般都会有多个用户自定义控件,而为了代码重用,通常这些控件都会继承一个父类, 一个页面还会引用多个用户自定义控件。 这种情况如果不注意控制就...
- **基础概念**:在Java或Kotlin中,继承允许一个类(子类)继承另一个类(父类)的属性和方法。在Android中,我们可以创建一个新的View或ViewGroup类,使其继承自已有的系统控件,如TextView、Button等。 - **...
当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 这时可以用 MForm先继承BaseForm, 然后FormA : MForm 这样...
子类会继承父类的所有属性和方法,并可以添加新的功能或者覆盖已有的方法。在这个场景下,我们将创建一个新的控件类,它是`Tcalendar`的子类,目的是为了突出显示当前日期。 具体实现步骤如下: 1. **创建新的控件...
这样可以从父类继承一些基本属性和方法,并添加新的功能。例如,你可以创建一个继承自TextBox的自定义控件,增加自动完成、语法高亮等特性。 2. **绘制控件**:为了实现独特的外观和交互效果,自定义控件可能需要...
在C#编程语言中,子类继承父类后,可以访问和使用父类中的成员,包括方法和属性。本文将详细讲解如何在C#中实现子类调用父类的方法。 首先,我们要理解继承的基本概念。在C#中,一个类(子类)可以继承另一个类...
在面向对象编程中,类继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。在QT5中,这种继承关系形成了一个庞大的类体系,使得开发者可以利用已有的基础类,快速创建功能丰富的用户界面和应用...
2. **设置IsInitialized属性**: 为了确保子类在初始化时能正确地继承父类的样式,需要在基类的构造函数中设置`InitializeComponent()`方法。此外,如果需要在子类中覆盖或扩展基类的行为,可以重写`OnInitialized`...
子类可以从父类继承属性和字段,也可以添加自己的属性和字段。这有助于封装和管理数据,使代码更加结构化。 5. **接口实现**:在某些情况下,基础窗体类可能实现了特定的接口,如`IResizable`,这要求子类也必须...
我们只需要定义一个类继承于系统 View 类,在 xml 文件中配置 layout 布局文件,重写父类的一些方法,并在程序中应用自定义的 view。这样我们就可以创建一个自定义的控件来满足我们的需求。 Android 自定义控件步骤...
在VB 2010中,事件通常由控件或自定义对象生成,然后由事件处理程序接收并处理。事件的发生通常通过声明一个事件变量(如`Event`关键字),然后使用`RaiseEvent`语句来触发。然而,当涉及到继承时,子类并不能直接...
- **目的**:从现有的TLabel控件派生一个新的控件TURLLabel,以利用TLabel的所有功能并添加额外的特性。 ##### 2. 修改控件样式 为了模拟超链接的效果,我们需要修改控件的一些基本属性: ```delphi constructor ...
为了创建自定义控件,开发者通常会选择继承现有的控件类,并在此基础上添加新的功能。例如,如果想要创建一个带有特殊样式的按钮,可以选择继承 Button 类。 **2.2 实现自定义属性(attr.xml, TypedArray)** - **...
在Delphi中,我们使用`class`关键字来定义类,并通过`inherited`关键字来调用父类的方法或属性。继承有助于代码复用和构建类层次结构。例如: ```delphi TBaseClass = class public property BaseProperty: ...