Flex - Spark - 如何只容纳容器的一部分?

时间:2012-11-08 18:33:23

标签: flex adobe arcgis flex-spark skinning

开发人员如何在不需要重新编写该组件的整个渲染的情况下仅覆盖Flex组件的一部分?

ESRI的ArcGIS Flex Viewer(3.0)有一个WidgetTemplate容器,我只想对其中一部分进行换肤,而不必负责整个容器的渲染。例如,我只想为这个容器的皮肤部分设置皮肤:

[SkinPart(required="false")]
public var header:Group;

这样我就可以将标题嵌入标签的颜色设置为我想要的任何颜色。

因此,我创建了以下名为 PrintWidgetSkin.mxml 的皮肤:

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">
   <!-- host component -->
   <fx:Metadata>
       [HostComponent("com.esri.viewer.WidgetTemplate")]
   </fx:Metadata>

   <!-- states -->
   <s:states>
       <s:State name="open" />
       <s:State name="minimized" />
       <s:State name="closed" />
       <s:State name="disabled" />
       <s:State name="normal" />
   </s:states>


   <s:Group id="header">
       <s:Label color="0x000000" />
   </s:Group>
</s:Skin>

并将WidgetTemplate实例的 skinClass 属性分配给此外观:

<viewer:WidgetTemplate id="wTemplate"
                       width="345" height="285"
                       minWidth="345"
                       minHeight="285"
                       styleName="fontstyle"
                       accentColor="0x33FF66"
                       color="0x33FF66"
                       skinClass="widgets.Print.PrintWidgetSkin">
</viewer:WidgetTemplate>

然而,当为此skinClass分配容器时,容器根本不显示。

为了澄清,只能将一个皮肤部分剥皮,而其他皮肤部位和容器的其余部分是否正常呈现?

我的主要来源是Adobe关于皮肤的页面:About Spark Skins

1 个答案:

答案 0 :(得分:1)

它不会显示,因为 com.esri.viewer.WidgetTemplate.as 的几个皮肤部分在您创建的皮肤中没有考虑。

如果您只想在单个小部件中更改标题的标签颜色,我建议您更改Print Widget的creationComplete处理程序中的颜色,而不是创建一个全新的外观。

另外,请查看 com.esri.viewer.skins.WidgetTemplateSkin.mxml 以获取更多想法和/或修改全局窗口小部件样式。