【问题标题】:Flex / ActionScript - Click Through An Element To Application Behind Air AppFlex / ActionScript - 点击一个元素到 Air App 后面的应用程序
【发布时间】:2012-12-03 12:42:23
【问题描述】:

我正在尝试使用 Flash Builder 中的 flex/Action Script 构建桌面 AIR 应用程序。

我想要的功能是这样的: - 透明背景 - 半透明(alpha 0.5)项/元素,忽略所有鼠标事件并“将点击传递”到应用程序背后的应用程序

所以基本上我想要的是元素以与透明背景完全相同的方式处理鼠标事件 - 即。就像你在点击后面的应用程序

这是我尝试过的代码示例。在下面的示例中,单击按钮会触发“单击窗口”警报,以证明单击被按钮忽略并到达具有透明背景的窗口。但是,当我删除单击处理程序时,单击按钮不会导致单击传递到后面的应用程序,就像在透明背景上的其他任何位置单击一样。

有什么想法吗?

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       alwaysInFront="true"
                       creationComplete="maximize();">
    <fx:Style> 
        @namespace s "library://ns.adobe.com/flex/spark"; 
        s|WindowedApplication 
        { 

            skinClass:ClassReference("spark.skins.spark.SparkChromeWindowedApplicationSkin"); 
            background-color:#999999; 
            background-alpha:"0"; 
        }          
    </fx:Style>
    <fx:Script>
        import mx.controls.Alert;

        public function windowClicked():void{
            Alert.show("window clicked");
        }

        </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:Window id="mainWindow" height="100%" width="100%" mouseChildren="false" backgroundAlpha="0">

        <s:Button label="Click Through Me Please" alpha="0.5"/>

    </s:Window>

</s:WindowedApplication>

【问题讨论】:

  • 使用 mouseChildren 和 mouseEnabled 属性 :)

标签: apache-flex actionscript air flash-builder


【解决方案1】:

我对你的问题做了一个简短的评论,但我想我会详细回答。

既然我确定你要做的比上面的例子更多,下面是这些属性的工作原理:

mouseEnabled="false" - 这表示你不能点击我,但你可以点击我的孩子。当您禁用单个项目或希望单击事件将项目传递给它的子项时,这很有效。

mouseChildren="false" - 这表示你不能点击我的孩子。如果您要在您的应用程序中构建可能包含 10 个显示对象并希望鼠标忽略它们全部的复杂叠加层,这将非常有用。

希望这会有所帮助!

【讨论】:

  • 非常感谢您的回答杰森。我目前正在使用 mouseChildren,它让窗口处理按钮上的任何点击。问题是尽管此单击不会“通过”窗口到达 AIR 应用程序后面的任何内容。即使它是 alpha=0,它也会在窗口处停止。再次感谢您的帮助。
  • 是的,这就是我想说的。在您的情况下,您需要 mouseChildren 和 mouseEnabled ,因为虽然窗口内的标签被禁用,但实际窗口本身不是。因此,在您的示例中,窗口将捕获所有通过标签的事件。如果您设置 标签或窗口现在都不会生成点击事件。另外,windowClicked() 是如何被调用的?我没有在您的代码中看到任何注册的点击事件侦听器。你拿出来测试了吗?
  • 再次感谢@jason-reeves - 是的,我删除了点击监听器进行测试。通过您建议的更改,不再调用单击事件,但单击仍然没有传递到下面的应用程序。也许这是不可能的?这是我的代码:&lt;s:Window id="mainWindow" height="100%" width="100%" mouseChildren="false" mouseEnabled="false" backgroundAlpha="0" click="windowClicked()"&gt; &lt;s:Button label="Click Through Me Please" alpha="0.5" mouseEnabled="false"/&gt; &lt;/s:Window&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多