2016-03-03 53 views
1

我想創建一個列表,其行爲就像我的Mac上的Finder菜單。換句話說,如果我點擊一個列表項目,保持我的鼠標停下來上下移動列表我希望所選項目改變。Flex更改列表項當鼠標關閉時選擇

在我的Flex應用程序中,如果我點擊我的列表,然後在鼠標仍然下移的情況下,上下移動列表中的選定項目保持不變。

任何意見將受到感謝。

感謝

回答

2

在StackOverflow的傳統,我在更努力後發佈瞭解決我自己的問題:

我有一個ItemRenderer的在我的名單。在ItemRenderer中,我聲明瞭一個變量來保存對擁有列表的引用。

private var _parentList:List; 

在「設置數據」功能中,我將此變量設置爲所有者列表。

override public function set data(value:Object):void { 
     super.data = value; 

     // Check to see if the data property is null. 
     if (value == null) 
      return; 

     // If the data property is not null. 

     // Get a reference to the parent list. 
     _parentList = this.owner as List; 
     ... 

然後我添加了一個EventListener來監聽MouseDown事件。

 // Attach an eventListener to the ItemRenderer. 
     this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); 
     ... 

我的onMouseOver處理程序看起來像這樣。

 private function onMouseOver(event:MouseEvent):void { 

      //trace(data.LocationName); 

      if (event.buttonDown == true) { 

       _parentList.selectedIndex = itemIndex; 
      } 
     } 

所以用這個來代替我可以在我的名單鼠標按下並保持鼠標按鈕按下向上和向下移動與總是被選擇的光標下方的列表項的列表。最後一部分是確保列表響應由ItemRenderer設置的selectedIndex。當用戶通過與控件交互來更改selectedIndex屬性時,控件將調度更改並更改事件。以編程方式更改selectedIndex屬性的值時,它將調度valueCommit事件。爲了確保我對選定列表項目的編程變化做出了響應,我在valueCommit事件中添加了一個處理程序。

<s:List 
     id="locationsList" 
     dataProvider="{presenter.locations}" 
     itemRenderer="itemrenderers.locationListItemRenderer" 
     useVirtualLayout="false" 
     width="1869.698" height="1869.698" 
     y="65.151" x="65.151" 
     borderVisible="true" 
     borderColor="{presenter.backgroundColour}" 
     contentBackgroundAlpha="0" 
     contentBackgroundColor="0xff336c" 
     labelField="label" 
     change="presenter.onLocationListChange(event)" 
     valueCommit="presenter.onLocationListValueCommit(event)"> 

    <s:layout> 
     <s:BasicLayout /> 
    </s:layout> 

    </s:List> 

到目前爲止,它似乎工作正常。希望能幫助到你。

相關問題