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()
}
Теоретически это должно препятствовать переходу вашего рендерера в выбранное состояние.