簡體   English   中英

禁用List或DataGrid組件的翻轉顏色

[英]Disable roll-over color for List or DataGrid components

我想擺脫基於列表的組件中典型的Flex翻轉顏色,並顯示我自己的翻轉渲染風格。

將useRollOver設置為'false' 不是一個選項 ,因為禁用它也會使List.isItemHighlighted()函數始終返回false。 我的自定義渲染器依賴於該功能。

會這么難嗎? 有沒有辦法將翻轉顏色設置為透明? 我的渲染器是否還有其他方法可以確定項目是否突出顯示?

謝謝!

編輯:當然我可以將rollOver顏色設置為'white'並將alternatingRowColors設置為類似於white的顏色。 有點作弊:)

通過在自定義ItemRenderer中將“autoDrawBackground”屬性設置為“false”,您可以禁用默認的懸停和所選背景顏色,然后根據需要在渲染器中設置它們。

這只是spark List選項。 MX控件沒有它。

@invertedSpear,謝謝你的暗示。

它確實有效! 我的意思是,子類化,而不是編輯SDK,沒有嘗試過。 但是你可以做的是為List,DataGrid等(甚至是AdvancedDataGrid)創建一個子類並添加以下函數:

override protected function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number, width:Number,
    height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
    // get style -- is this the right place?
    var alpha:Number = this.getStyle("rollOverAlpha");
    if (isNaN(alpha))
        alpha = 1.0;

    // no need to draw if alpha 0
    if (alpha <= 0)
        return;

    // draw -- this has been copied from superclass, and the alpha parameter added to beginFill()
    var g:Graphics = Sprite(indicator).graphics;
    g.clear();
    g.beginFill(color, alpha);
    g.drawRect(0, 0, width, height);
    g.endFill();

    indicator.x = x;
    indicator.y = y;
}

現在,如果您向類添加樣式聲明,則可以滾動:

[Style(name="rollOverAlpha", type="Number", inherit="no")]
public class DataGridExt extends DataGrid
{
    ...
}

在SDK中更改它當然是一個更好的選擇,因為您只需要觸摸兩個類:ListBase和AdvancedListBase。 我會檢查一下Adobe Jira問題..

有一種方法可以做到這一點,但這並不好玩。 您可以編輯SDK本身(Yay for open source)。 您可以進入,找到設置突出顯示顏色的位置,然后開始添加代碼以生成突出顯示的alpha的公共屬性。 我會首先備份你的SDK,因為有可能完全搞砸了。

看起來rollOver代碼在ListBase類中,所以我會創建該類的副本或擴展,並將roll over alpha的代碼添加到該類。 然后我會創建一個繼承自這個新ListBase的List類的副本。

祝你好運我的朋友,如果你成功了,請與全世界分享你的新課程,因為我相信其他人可能想要做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM