Flexには穴がたくさんあり、正しく機能させるには多くのハックが必要ですが、私はそれを正しく機能させるための正しい道を進んでいると思います。私が実装しようとしている問題と解決策について説明します。正しい道を教えていただければ幸いです。
私がやろうとしているのは、Spark DataGrid列の幅をSparkラベルの幅にバインドすることです。これが最初の穴です。GridColumnにはバインドプロパティ「width」がありますが、オブジェクトの作成が完了した後は準備ができていません。ユーザーの操作後にのみ公開されます。そこで、最初のハックを思いつきました。DataGrid自体から列幅を抽出し、列が作成されたとき、または列のサイズが変更されたときにトリガーされるイベントにバインドされる関数で、次のように機能します。
[Bindable(event="creationComplete")]
[Bindable(event="columnStretch")]
[Bindable(event="propertyChange")]
public function columnWidth(grid:DataGrid, column:GridColumn):int {
if(isNaN(column.width)){
if(column.grid){
return column.grid.getColumnWidth(grid.columns.getItemIndex(column));
}
}
return column.width;
}
作成時に幅を取得するように機能しますが、バインド可能なプロパティが機能するため、カーソルで列の幅を設定すると機能しません。したがって、ラベルの幅をそのように設定すると、次のようになります。 :幅はユーザーの操作後に変更されますが、グリッドの作成が完了した後は変更されません。グリッドの完成後に幅を変更して幅を設定したが、ユーザーの操作に反応しない場合...
何か助けはありますか?