自定义拖放组件:当我添加皮肤时,拖放不再有效?

时间:2012-03-12 18:35:42

标签: flex drag-and-drop

我有一个skinnableContainer,它充当其他拖放项目的容器。在添加容器的同时,此容器的删除功能将从其父级添加。

这一切都正常,直到我向skinnableContainer添加一个皮肤类,现在没有一个可拖动的项目可以像以前一样放入容器中。

我假设从内部包装内容的Group组件以某种方式充当块,但我不确定如何通过它来允许删除功能?

有什么想法吗?

编辑以下皮肤代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark" alpha.disabled="0.5">

<fx:Metadata>
    [HostComponent("spark.components.SkinnableContainer")]
</fx:Metadata> 

<s:states>
    <s:State name="normal" />
    <s:State name="disabled" />
</s:states>

<!-- layer 1: border -->
<s:Rect left="0" right="0" top="0" bottom="0" radiusX="5" radiusY="5">
    <s:stroke>
        <s:SolidColorStroke color="0" alpha="0.50" weight="1" />
    </s:stroke>
</s:Rect>

<s:Group id="contentGroup" left="0" right="0" top="0" bottom="0"  >
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
</s:Group>
</s:Skin>

1 个答案:

答案 0 :(得分:0)

您的自定义皮肤没有背景填充,因此除边框外它完全透明。因此,没有“hitzone”可以放下你的物品(如果你准确地瞄准那个1px边框,你现在可能会放弃它们。)

解决方案 - 显然 - 是给它一个填充。不用担心,如果您希望它看起来透明,只需将其alpha设置为0

<s:Rect left="0" right="0" top="0" bottom="0" radiusX="5" radiusY="5">
    <s:fill>
        <s:SolidColor alpha="0" />
    </s:fill>
    <s:stroke>
        <s:SolidColorStroke alpha="0.50" />
    </s:stroke>
</s:Rect>