mouseEnabledWhereTransparent不按预期工作
我只是不明白为什么mouseEnabledWhereTransparent不适用于此皮肤。mouseEnabledWhereTransparent不按预期工作
创建的皮肤基本上是一个带有透明背景和左侧的小三角形的按钮,如下所示:> ButtonText但Triangle周围的空白空间不会接收鼠标事件。
我试过围绕三角形路径包裹另一组,并试图将它包装到一个图形对象中,也没有成功。我可以在任何地方创建一个带0 alpha的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>
哟,你需要的是添加一个矩形之前路径作为点击区域行动,这个工程:
<s:Rect left="0" right="0" top="0" bottom="0" >
<s:fill>
<s:SolidColor alpha="0" />
</s:fill>
</s:Rect>
这家伙here有制作自定义按钮的一个很好的例子(减标签)
如果在设置的组上没有鼠标事件侦听器,mouseEnabledWhereTransparent无效。在你的例子中,Button对象有一个点击事件监听器,但Button的皮肤对象(SparkSkin)没有。
从ASDoc的为GroupBase.mouseEnabledWhereTransparent:
“此属性只有在那张如果鼠标,触摸,或Flash Player的手势事件被添加到这个实例效应”
一种解决方法,你将鼠标事件侦听器添加到什么都不会做的皮肤,例如:
<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>
主要用例该物业已被直接添加点击事件一个集团,但想想你提出的案例很有意思。按照“在皮肤上设置mouseEnabledWhereTransparent时,如果hostComponent附加了鼠标侦听器,应该会产生效果”这一行提交增强请求可能是合理的。
嗯,但你通常不会在按钮外观中添加点击监听器。 Spark皮肤的全部重点是将逻辑从UI分离出来,将点击监听器添加到实际的按钮上。 – iddqd 2011-03-02 21:27:11
是的,你是对的,你不应该在皮肤中添加该听众。如果你真的希望mouseEnabledWhereTransparent属性能够工作,我只是提到它是一种解决方法。正确的做法是不在皮肤中使用mouseEnabledWhereTransparent,而是绘制透明的Rect。 – 2011-03-03 06:33:57
所以我们可以说,如果在皮肤中使用它,mouseEnabledWhereTransparent不起作用?如果是,为什么?以此为例:http://forums.adobe.com/thread/710351无论您启用还是禁用mouseEnabledWhereTransparent,CustomButtonSkin.mxml代码的行为都完全相同。 – iddqd 2011-03-06 10:27:10
您是否运行了以下答案? – Ryan 2011-03-02 18:06:26
好吧,如果它有mouseEnabledWhereTransparent = true,那么完全空的组将响应不可见区域上的mouseEvents。当mouseEnabledWhereTransparent = true时,SparkSkin将不会响应不可见区域上的mouseEvents。 SparkSkin是Group的一个子类。我不明白。 – iddqd 2011-03-02 21:35:41