2011-02-10 23 views
3

這是在與我的第一個問題第二個問題:flex 4:mx | Tree如何禁用懸停和選擇顏色?

Flex 4: mx|tree - how can i disable items selection?

我想禁用懸停和選擇的顏色,以便當用戶選擇它的背景不會改變顏色的項目。這怎麼可能?

更新

我不想選擇選擇和盤旋的顏色。背景包含一個圖像,所以它不會有用。我需要徹底禁用顏色。

另一個更新

我試圖重寫樹類,但沒有運氣。

這是覆蓋樹類的類:

package components.popups.WelcomeBack { 
import mx.controls.listClasses.IListItemRenderer; 
import mx.controls.Tree; 

/** 
* @author ufk 
*/ 
public class TreeNoSelection extends Tree { 

    protected override function drawItem(item:IListItemRenderer, 
          selected:Boolean = false, 
          highlighted:Boolean = false, 
          caret:Boolean = false, 
          transition:Boolean = false):void 
    { 
     super.drawItem(item, false, false, false, transition); 
    } 

} 


} 

,這是我的實際樹組件:

<?xml version="1.0" encoding="utf-8"?> 
<WelcomeBack:TreeNoSelection xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:WelcomeBack="components.popups.WelcomeBack.*" folderClosedIcon="{null}" defaultLeafIcon="{null}" 
    folderOpenIcon="{null}" 
    showRoot="false" 
      allowMultipleSelection="false" allowDragSelection="false" labelField="@label"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     import ItemRenderer.WelcomeBackTreeItemRenderer; 
     private var _themeLibrary:Object; 

     public function get themeLibrary():Object { 
      return this._themeLibrary; 
     } 

     public function set themeLibrary(tl:Object):void { 
      this._themeLibrary=tl; 
      var cf:ClassFactory = new ClassFactory(); 
      cf.generator = ItemRenderer.WelcomeBackTreeItemRenderer; 
      cf.properties = { 
       _themeLibrary:this._themeLibrary 
      }; 
      this.itemRenderer=cf; 
     } 

    ]]> 
</fx:Script> 

</WelcomeBack:TreeNoSelection> 

感謝

回答

4

我有好消息和壞消息。好消息是,這非常簡單。壞消息是你需要繼承樹的子類。

package custom 
{ 
    import mx.controls.Tree; 
    import mx.controls.listClasses.IListItemRenderer; 

    public class CustomTree extends Tree 
    { 
     protected override function drawItem(item:IListItemRenderer, 
           selected:Boolean = false, 
           highlighted:Boolean = false, 
           caret:Boolean = false, 
           transition:Boolean = false):void 
     { 
      super.drawItem(item, false, false, false, transition); 
     } 

    } 
} 

這裏那麼,什麼情況是,我們攔截DRAWITEM方法並調用父類方法欺騙它,以爲沒有什麼選擇,突出或「careted」。插入符號用於當您通過鍵盤改變選擇時。不確定轉換參數的作用是什麼,如果仍然有一些效果困擾着你,你可以一直髮送它。

編輯

在相關問題採取後一看,我發現了問題的根源是使用新的Spark架構的項目渲染器,這意味着渲染器負責與反應的特殊狀態(選中,突出顯示,顯示插入符號)。因此,使用Spark項呈示當有其他3個功能還需要重寫:

public class CustomTree extends Tree 
{ 
    public override function isItemShowingCaret(data:Object):Boolean 
    { 
     return false; 
    } 

    public override function isItemHighlighted(data:Object):Boolean 
    { 
     return false; 
    } 

    public override function isItemSelected(data:Object):Boolean 
    { 
     return false; 
    } 

    protected override function drawItem(item:IListItemRenderer, 
             selected:Boolean = false, 
             highlighted:Boolean = false, 
             caret:Boolean = false, 
             transition:Boolean = false):void 
    { 
     super.drawItem(item, false, false, false, transition); 
    } 
} 

獎金 - 覆蓋isItemSelectable防止選擇一個項目時,點擊(你仍然可以通過鍵盤選擇它們,但不會有那的視覺暗示):

public override function isItemSelectable(data:Object):Boolean 
{ 
    return false; 
} 
+0

看起來很棒。要測試它。感謝 – ufk

+0

不幸的是,它沒有解決問題。我可能會做錯事。我將代碼粘貼到我的主帖子中。請更新我。謝謝 – ufk

+0

您能否以我們實際可以看到您使用的樹組件的方式進行編輯?基本上重要的是使用新的樹類而不是舊的類,在你的情況下TreeNoSelection。另外,確保你已經清除了瀏覽器緩存,或者至少它加載了你的新版本。 –

3

可以使用rollOverColor在樹上選擇顏色樣式。有不同的方式來設置樣式,但在這裏我將它們設置爲內聯到白色,將顏色更改爲任何背景顏色。

<mx:Tree rollOverColor="#FFFFFF" selectionColor="#FFFFFF" 
+0

謝謝,不幸的是,這不能解決我的問題。我需要顏色是透明的,因爲背景包含圖像。我不能選擇一個特定的顏色 – ufk

3

您可能能夠使用4通道的色彩搭配JSS的做法:

<mx:Tree rollOverColor="#00FFFFFF" selectionColor="#00FFFFFF" 

...包括Alpha通道(全透明)顏色選擇。

+0

謝謝。此方法也適用,但我更喜歡知道如何覆蓋,因此選擇和滾動顏色將不會被繪製。 – ufk