Я столкнулся с аналогичной проблемой при помещении кнопок внутри заголовка объекта DataGridColumn. Если была нажата кнопка, я хотел запретить сортировку столбца, в противном случае, если щелкнуть где-либо еще внутри заголовка, я бы хотел, чтобы столбец сортировался нормально.
Мое решение было достигнуто путем добавления открытого свойства к обработчику заголовков, которое указывало, была ли мышь на кнопке или на остальной части заголовка:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
mouseDown="{handleMouseClick(event);}"
width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.controls.Button;
import mx.controls.dataGridClasses.DataGridColumn;
[Embed(source="assets/images/search-icon-small.png")]
[Bindable] private var searchIcon:Class;
[Bindable] private var _headerText:String;
[Bindable] public var searchClicked:Boolean = false;
override public function set data(value:Object):void {
if (value)
this._headerText = (value as DataGridColumn).headerText;
}
private function handleMouseClick(e:MouseEvent):void {
searchClicked = e.target is Button;
}
]]>
</mx:Script>
<mx:Label id="lbl_header" text="{_headerText}"/>
<mx:Button icon="{searchIcon}" height="20" width="20" right="20" mouseDownOutside="{searchClicked = false}" mouseDown="{searchClicked = true}"/>
В родительском приложении прослушайте событие headerRelease таблицы данных (сокращенный код):
<mx:DataGrid id="dg_members" headerRelease="{handleSort(event);}"/>
private function handleSort(e:DataGridEvent):void {
if ((e.itemRenderer as SearchHeader).searchClicked)
e.preventDefault();
}
Возможно, есть более элегантные решения, но они быстрые и грязные.