Flex:旋转按钮和改变焦点

时间:2010-08-26 14:50:34

标签: flex actionscript-3 flex3 flexbuilder

我在Flex中旋转按钮时出现问题。它们似乎污染了其他组件的焦点矩形。
采用以下源代码,这可能不是更简单:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:VBox width="100%" height="100%">
        <mx:Spacer height="100" />
        <mx:Button rotation="10" />
        <mx:TextArea rotation="0" />
    </mx:VBox>
</mx:WindowedApplication>

现在执行它。单击文本区域,焦点矩形正确。按Tab键两次,旋转TextArea的焦点矩形旋转!

是否有解决方法,或者我应该完全避免旋转按钮?

我正在使用Flex SDK 3.5。

谢谢,

丹尼尔

2 个答案:

答案 0 :(得分:2)

我最近偶然发现了这个错误。这是一个link to suggested fix

但是,我想知道是否有更通用的解决方案,而不是扩展每个组件并覆盖adjustFocusRect。

我提出了扩展FocusManger并覆盖focusPane的getter,如下所示:

override public function get focusPane():Sprite
{
    var fp:Sprite = super.focusPane;
    if (fp && fp.numChildren != 0)
        fp.getChildAt(0).rotation = 0;

    return super.focusPane;
}

并将其设置为应用程序的焦点管理器:

private function onPreinitialize():void
{
    application.focusManager = new FocusManagerEx(this);
}

这似乎有效,但如果有专家能够判断出是否有任何我不知道的陷阱会很好。

答案 1 :(得分:1)

似乎是Flex SDK中的一个错误。我看到下一个选项:

  • 使用focusSkin =“{null}”
  • 禁用焦点矩形
  • 实现自己的皮肤并正确处理旋转
  • 转到Spark,因为3.5是(当前) 第三代的最后一个SDK
  • 尝试自己解决(我觉得它会 棘手...)

此外,您可能会在Adobe的跟踪器中提交一个错误,但它们已经深入到第4代Flex中。

更新:3.6每晚构建也包含此错误。