Actionscript 3 Flex:MXDataGridItemRenderer内spark.components.TextArea的换行问题

Actionscript 3 Flex:MXDataGridItemRenderer内spark.components.TextArea的换行问题,actionscript-3,apache-flex,textarea,line-breaks,Actionscript 3,Apache Flex,Textarea,Line Breaks,我有一个DataGrid,它有一个mxdatagriditemrender作为itemdeditor应用于其中一列。编辑器包括一个spark.components.textare控件 默认情况下,按下[enter]键时,datagrid的任何文本项编辑器都会自动关闭。。 记住这一点;我想做的是: 防止编辑器在[SHIFT+ENTER]键关闭,但接受换行符(我可以这样做,请参见下面的代码) 按[ENTER]键关闭编辑器,但不接受换行符(无法实现此功能) 以下是MXDataGridItemRende

我有一个
DataGrid
,它有一个
mxdatagriditemrender
作为
itemdeditor
应用于其中一列。编辑器包括一个
spark.components.textare
控件

默认情况下,按下[enter]键时,datagrid的任何文本项编辑器都会自动关闭。。 记住这一点;我想做的是:

  • 防止编辑器在[SHIFT+ENTER]键关闭,但接受换行符(我可以这样做,请参见下面的代码)
  • 按[ENTER]键关闭编辑器,但不接受换行符(无法实现此功能)
  • 以下是
    MXDataGridItemRenderer
    中的当前代码:

    <s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                          xmlns:s="library://ns.adobe.com/flex/spark" 
                          xmlns:mx="library://ns.adobe.com/flex/mx" 
                          focusEnabled="true" 
                          >
    <fx:Script>
        <![CDATA[
            protected function onTxtDataKeyDown(event:KeyboardEvent):void
            {
                if (event.keyCode == 13)
                {
                    if (event.shiftKey)
                    {
                        //Prevent editor from closing on [SHIFT+ENTER] key but accept the linebreak
                        event.stopImmediatePropagation(); // » works
                    }
                    else
                    {
                        //Close the editor on [ENTER] key but do not accept the linebreak
                        event.preventDefault(); // » does not work
                    }
                }
            }
    
        ]]>
    </fx:Script>
    
    <s:TextArea id="txtData" paddingTop="3" lineBreak="explicit"
                text="{dataGridListData.label}" 
                verticalScrollPolicy="auto" horizontalScrollPolicy="off" 
                keyDown="onTxtDataKeyDown(event)" 
                />
    
    
    

    我还尝试了
    textInput
    事件,但没有成功。 因此:当编辑器在[enter]键上关闭时,我如何防止换行符

    感谢您的帮助。谢谢


    编辑:如果我将spark.components.TextArea更改为mx.controls.TextArea,则使用
    event.preventDefault()的第二部分
    将按预期工作,但SHIFT+ENTER接受换行符的第一个部分将不工作。

    根据API参考,按键功能只能在空中取消,不能在Flash Player中取消。你为哪一个开发?我无法取消空中的
    keyDown
    textinput
    。可能是个虫子。为什么不用Adobe记录一个缺陷,看看他们怎么说

    更新:我已经确认这确实是
    spark.components.textare
    中的一个bug。该线程讨论了类似的问题。Flex也记录了一个bug-


    解决方法是使用
    mx.controls.TextArea
    我的英语不好。请看代码

    <!--snip-->
    <fx:Script>
        <![CDATA[
    
            protected function textArea_creationCompleteHandler(event:FlexEvent):void{
                textArea.addEventListener(TextOperationEvent.CHANGING,onChangingHandler);
            }
    
            //This event is faster than KEY_DOWN.
            private function onChangingHandler(event:TextOperationEvent):void {
                if(event.operation is SplitParagraphOperation){
                    //SplitParagraphOperation only cancel.
                    event.preventDefault();
                }
            }
    
        ]]>
    </fx:Script>
      <s:TextArea id="textArea"
                        width="100"
                        creationComplete="textArea_creationCompleteHandler(event)"
                        height="60"
                        />
      <!--snip-->
    
    
    
    正如我在帖子中所说;我以前试过。这不适用于spark.components.TextArea。按enter键时,textinput不会跟踪任何内容。仅当它是常规字符键(如a、b、c..space等)时才进行跟踪。也不能执行此操作。如果在文本区域中选择了文本,该怎么办?按回车键会把它全部删除,只去掉换行符并不能解决问题。我正在为AIR开发。是的,似乎是一个bug。如果您仍然感兴趣,我已经确认您的问题是一个缺陷,flex团队已经意识到了这一点。更新答案,并提供相关讨论的链接。