【问题标题】:Flex easy set buttonmode to all buttonsFlex 轻松将按钮模式设置为所有按钮
【发布时间】:2011-04-09 03:58:39
【问题描述】:

是否有一种简单的方法可以将我的应用程序中的所有按钮的 buttonMode 设置为 true? 我想创建一个自定义组件来扩展 s:Button 并将 buttonMode 设置为 true 但我想知道是否有像 CSS 这样更简单的方法。

提前致谢

【问题讨论】:

  • 你想通过设置 buttonMode = true 来实现什么行为?也许有办法以另一种方式获得这种行为。
  • 我要显示手形光标

标签: apache-flex button


【解决方案1】:

正如韦德所说,皮肤是一个不错的选择。虽然在皮肤上设置 buttomMode="true" 不会按您想要的方式工作,但您可以像这样从皮肤设置主机按钮的 buttonMode:

<fx:Script>
    <![CDATA[
        import spark.components.Button;

        override protected function commitProperties():void
        {
            super.commitProperties();
            hostComponent.buttonMode = true;
        }

    ]]>
</fx:Script>

【讨论】:

  • 谢谢你!这对我很有帮助。
【解决方案2】:

您可以使用皮肤和 css 来做到这一点。将默认 ButtonSkin 复制到自定义皮肤类并在皮肤上设置 buttonMode="true"。 (如果这不起作用,您可以尝试在创建完成时设置 hostComponent.buttonMode = true。)然后将 s:Button 的外观设置为您的 css 中的自定义外观。

【讨论】:

    【解决方案3】:

    您可以尝试编写一个在运行时遍历所有对象的爬虫,或者像这样:

    stage.addEventListener(Event.ADDED_TO_STAGE, parseItem, true);
    

    然后:

    function parseItem(e:Event):void{
      if (e.target is Button)
          e.target.buttonMode = true;
    }
    

    添加到舞台的每个项目都应经过此事件(即使仅将其父项添加到显示列表中)。

    当然,您必须先添加此事件侦听器,然后才能将任何内容实际添加到舞台!

    【讨论】:

    • 显然它会对性能产生一些影响,每个添加到舞台的DisplayObject都会派发这个事件,但是如果您不断地在舞台上添加和移除东西,这只是一个问题。如果您每一步执行此操作的频率低于一次,则差异应该不会很明显。如果您使用 Flex Framework,情况可能会更糟,但如果您的应用程序编写得很好,它也应该被忽视。此外,您可以在不再需要侦听器时删除它。
    【解决方案4】:

    很遗憾,我认为您没有其他选择可以创建自定义按钮。

    您可以修改原始 Button 组件,但我不推荐这种做法。

    【讨论】:

    • 该死.. 我想我会在 adobe 的 jira 上提交一个 JIRA 问题
    • 在这种情况下,要么创建一个 shell 脚本来替换所有按钮,要么只修改 Button 组件
    【解决方案5】:

    我还建议使用 Maurycy 的方法,或者您可以在项目中修改 Button 类。这甚至可能更容易,而且不会对性能造成影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多