flex предотвратить выбор состояния в списке искр

У меня есть ItemRenderer, в котором выбранное состояние должно быть отключено (я использую состояния визуализации, и у меня нет выбранного состояния). Проблема в том, что список (искра) сбрасывает состояние средства визуализации элемента при щелчке, даже если у меня нет "выбранного" состояния.

Я хочу полностью предотвратить это поведение, но я не знаю как. Мой рендерер имеет autoDrawBackground, установленный в false, но он должен быть включен (хотя enabled = false устраняет эту проблему) Кроме того, у рендерера есть несколько дочерних элементов, включая собственный список. Установка mouseEnabled="false" для рендерера исправляет сам рендерер, но не его дочерние элементы, и мне нужно, чтобы некоторые из дочерних элементов были включены мышью.

Редактировать:

Ниже приводится выдержка из моего рендерера предметов:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                xmlns:s="library://ns.adobe.com/flex/spark"
                width="100%" autoDrawBackground="false">

    <s:states>
        <s:State name="normal" />
        <s:State name="suitable" />
        <s:State name="mine" />
        <s:State name="deleted" />
    </s:states>

    <s:Rect id="rect" top="0" right="0" bottom="0" left="0">
        <s:fill>
            <s:SolidColor id="background"
                          alpha=".8" alpha.deleted=".4"
                          color="0xff0000" color.suitable="0x00ff00" color.mine="0x0000ff" />
        </s:fill>
    </s:Rect>

    <s:Label id="name" left="4" top="4" right="40" />

    <s:List id="myList" left="4" top="40" right="4"
            contentBackgroundAlpha="0" borderVisible="false" horizontalScrollPolicy="off">
        <s:layout>
            <s:VerticalLayout gap="3" paddingBottom="4" requestedMinRowCount="2" />
        </s:layout>
    </s:List>
</s:ItemRenderer>

Второе редактирование:

У меня была та же проблема с состоянием наведения мыши, но похоже, что есть обходной путь:

override protected function set hovered(value:Boolean) : void
{
    // do nothing (prevent current state from changing to "hovered" state)
}

1 ответ

Мне неясно, хотите ли вы предотвратить выбор предмета; или просто запретить визуальные свойства, которые соответствуют выбранному элементу.

Обрабатывать визуальные аспекты; Я бы попытался переопределить метод getCurrentRendererState(). Что-то вроде этого:

override protected function getCurrentRendererState():String{
  if (selected && hasState("selected"))){
    return "normal"; // or whatever state you want it to be
  }
  if (selected && down && hasState("downAndSelected")){
     return "normal"; // or whatever state you want it to be
  }        

  super.getCurrentRendererState()

}

Теоретически это должно препятствовать переходу вашего рендерера в выбранное состояние.

Другие вопросы по тегам