我只是无法理解为什么mouseEnabledWhereTransparent不能在这个皮肤上工作。
它创建的皮肤基本上是一个带有透明背景和左侧小三角形的按钮,如下所示:> ButtonText 但三角形周围的空白区域不会接收鼠标事件。
我尝试在三角形路径周围包裹另一个组,我尝试将其包装成图形对象,但也没有成功。我可以在所有内容下创建一个0字母的Rect,但这不正是mouseEnabledWhereTransparent应该为我做什么吗?
<?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="21" minHeight="21" alpha.disabled="0.5"
mouseEnabledWhereTransparent="true">
<!-- host component -->
<fx:Metadata>
<![CDATA[
[HostComponent("spark.components.Button")]
]]>
</fx:Metadata>
<!-- states -->
<s:states>
<s:State name="up" />
<s:State name="over" />
<s:State name="down" />
<s:State name="disabled" />
</s:states>
<!-- triangle tip -->
<s:Path data="M 0 0 L 0 14 L 10 7 L 0 0" bottom="5">
<s:fill>
<s:SolidColor color="0xFFFFFF" />
</s:fill>
</s:Path>
<!-- text -->
<s:Label id="labelDisplay"
textAlign="center"
verticalAlign="bottom"
maxDisplayedLines="1"
left="14" right="10" top="2" bottom="2" color="0x000000" fontSize="14">
</s:Label>
</s:SparkSkin>
答案 0 :(得分:1)
哟,你需要的是在该路径之前添加一个矩形作为命中区域,这有效:
<s:Rect left="0" right="0" top="0" bottom="0" >
<s:fill>
<s:SolidColor alpha="0" />
</s:fill>
</s:Rect>
这个人here有一个很好的例子来制作自定义按钮(减去标签)
答案 1 :(得分:0)
如果在设置的组上没有鼠标事件侦听器,则mouseEnabledWhereTransparent无效。在您的示例中,Button对象具有单击事件侦听器,但Button的外观对象(SparkSkin)没有。
来自ASDoc for GroupBase.mouseEnabledWhereTransparent:
“只有将鼠标,触摸或Flash播放器手势事件添加到此实例时,此属性才会生效。”
您的解决方法是将鼠标事件侦听器添加到不会执行任何操作的外观,例如:
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
mouseEnabledWhereTransparent="true" click="doNothing()">
<fx:Script>
<![CDATA[
protected function doNothing():void {
trace('doNothing');
}
]]>
</fx:Script>
...
</s:SparkSkin>
此属性的主要用例是将点击事件直接添加到组中,但考虑您提出的案例很有意思。根据“如果hostComponent附加了鼠标侦听器,在皮肤上设置mouseEnabledWhereTransparent应该有效”,提交增强请求可能是合理的。