Отображение подсказок элемента списка в flex - PullRequest
1 голос
/ 11 октября 2010

У меня есть список объектов, содержащий значок, метку и всплывающую подсказку. Я хочу показать только значок и ярлык. Подсказки должны быть видны при наведении мыши на элемент.

Есть ли способ, которым я могу достичь этого без написания своих собственных функций наведения мыши?

(Обратите внимание, что всплывающие подсказки - это разные вещи, так как они отображаются только после обрезки этикетки)

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Самый простой способ отобразить всплывающие подсказки над элементами List - это предоставить свойство dataTipField или dataTipFunction, но, поскольку вы, похоже, хотите сохранить поведение по умолчанию 'cut label', тогда вы, вероятно, не избежите написания своего собственногорешения.

ОБНОВЛЕНИЕ: ОК.Поработав с кодом в течение некоторого времени, я должен признать, что показать эти подсказки может быть немного сложно, но как только вы знаете, что делать, это на самом деле тривиально.Вам нужно установить для свойства showDataTips значение true и dataTipFunction для некоторой функции, генерирующей ваш совет, например.

function(item:Object):String{
    return item.tipField;
}

Странная вещь в том, что установка свойства dataTipField в'tipField' не будет работать так же, как вышеописанная функция, и насколько я хочу знать почему, он остается для меня секретом.

ОБНОВЛЕНИЕ 2: На самом деле это поведение не странноеВообще-то, как это явно указано в документации showDataTips, но, поскольку я старею и не вижу того, что хорошо, как я привык, вы должны простить мне мое предыдущее утверждение:)

0 голосов
/ 13 октября 2010

Я столкнулся в основном с тем же сценарием ... ну, есть небольшие отличия, я использую Flex mx.controls.List и на нем установлен рендерер, рендерер является расширением флажка, я хотел иметь более жесткий контроль над подсказками, так что я могу выбрать отображение вспомогательной информации, а не полнотекстового (и только в усеченном виде). Я попытался поэкспериментировать с некоторыми вещами, основываясь на просмотре источника ToolTipManager, но использование метода внутреннего регистра не сработало, в конце концов я сделал в основном то, что вы сказали, и это, кажется, работает без проблем. Интересно, в чем проблема с использованием ваших собственных обработчиков событий, вы все равно можете использовать встроенные в ToolTipManager методы для отображения / скрытия, поэтому он выглядит относительно чистым. Код ниже взят из самого рендерера:

private var myToolTip:IToolTip;

public function FilterItemRenderer() {
    addEventListener(MouseEvent.MOUSE_OVER, mouseOver_handler);
    addEventListener(MouseEvent.MOUSE_OUT, mouseOut_handler);
}
private function mouseOver_handler(event:MouseEvent):void
{
    //In my case using the data elements of the DP to carry the info for tooltips
    if(data.hasOwnProperty("toolTip") && data.toolTip)
        myToolTip = ToolTipManager.createToolTip(data.toolTip, event.stageX+5, event.stageY-5)
}
private function mouseOut_handler(event:MouseEvent):void
{
    if(myToolTip)
        ToolTipManager.destroyToolTip(myToolTip);
    myToolTip=null;
}
override public function get toolTip():String
{
    return null;
}

Так что я думаю, что мой ответ - нет, я не вижу никакого способа сделать это помимо того, что вы предложили, но еще раз не могли бы вы уточнить, в чем проблема с этим?

Спасибо и удачи, Shaun

...