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



我有一个skinnableContainer,它充当其他可拖放项目的容器。该容器的放置功能是在添加容器的同时从其父容器添加的。

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

我假设从皮肤中包装内容的Group组件在某种程度上起到了一个块的作用,但我不确定如何允许drop功能通过它?

有什么想法吗?

编辑下面的皮肤代码:

<?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>

您的自定义皮肤没有背景填充,因此除了边框之外,它是完全透明的。正因为如此,没有"命中区"可以放置你的物品(现在,如果你的目标恰好是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>

最新更新