当点击框时,我希望原生Flex复选框仅更改状态。如果用户单击标签,则状态不应更改。
点击事件无法被静音,因为它在父母组件中使用。
任何想法如何获得这样的功能?如何检测,该用户点击了标签?
谢谢, 拉法尔
答案 0 :(得分:3)
Marty Pitt 非常接近正确答案。我已经为他的代码添加了一个事件处理程序,它会阻止传播 - 现在它完美地工作(正如预期的那样)!
以下代码是一个扩展mx:CheckBox
的代码:
override protected function createChildren():void {
super.createChildren();
this.mouseChildren = true;
textField.mouseEnabled = false;
textField.addEventListener(MouseEvent.CLICK, textFieldClickHandler);
}
protected function textFieldClickHandler(me:MouseEvent):void{
me.stopImmediatePropagation();
}
谢谢。
答案 1 :(得分:1)
解决方法 - 没有标签的复选框和附近的单独标签。
答案 2 :(得分:1)
如果它是Halo复选框,我会创建一个子类,并覆盖createChildren()
,例如:
override protected function createChildren():void {
super.createChildren();
// in Button, this is false by default, however we want to restrict
// clicking to the button itself, not the label, so allow the children
// to recieve mouse events, to prevent the button from dispatching them.
this.mouseChildren = true;
textField.mouseEnabled = false;
}
这看起来像是一个非常糟糕的黑客,但它可能有效(我还没有测试过)。
如果它是Spark复选框,那么您可以创建一个单独的皮肤。更干净!