2
A
答えて
3
あなたDataGrid
のdrawRowBackgroundメソッドをオーバーライドし、それがカスタムの背景を必要とするかどうかを確認することができます。
もしそうなら、この方法のsuper
呼び出しに新しい背景色を渡す:
someWord
は、あなたが探している単語で、
yourCustomColor
は新しい背景色を表す
uint
で、例えば
protected override function drawRowBackground(s:Sprite, rowIndex:int,
y:Number, height:Number, color:uint, dataIndex:int):void
{
if ((dataProvider[dataIndex] as String).indexOf(someWord) >= 0)
color = yourCustomColor;
super.drawRowBackground(s, rowIndex, y, height, color, dataIndex);
}
:
var yourCustomColor: uint = 0xff0000;
私は非常にフレキシブルで、このコードをどこに置く必要がありますか? – def
カスタム 'DataGrid'クラスが必要です(ルート要素が' DataGrid'の場合は 'MyDataGrid.mxml')。そしてそのコンポーネント実装の '
rekaszeruのアプローチは確かに有効ですが、このロジックをアイテムレンダラーに追加する方がより論理的だと思います。
custom item rendererを作成し、データに基づいて
setStyle("color", "...")
とすることができます。レンダラーが再利用され、上書きされない場合は古い値が含まれるため、単語が見つからないときに色を消去することを忘れないでください。出典
2011-05-16 10:30:14 alxx
真ですが、この方法では、すべての列に対してカスタムレンダリングが必要であり、ロジック全体を実装して行全体をカバーする必要があります。選択されたアイテムレンダラーがセルに完全に合致しないようにする必要がある場合は、しばしば難しくなります(新しい塗りの親レイアウトが必要です)。 – rekaszeru
Item rendererは、DataGrid全体または必要に応じて列ごとに1回設定できます。異なる列を同じロジックで制御することができます。私は、ロジックをDataGridに埋め込むのは難しいと感じています。 – alxx
あなたは注意することがポイントで、次のcode.Coupleを使用して試すことができます:
1)あなたがDataGrid内の単純なテキストを表示している場合(まあ、あなたもレンダラーの他のタイプのためにこれを行うことができ、このアプローチを使用して、他のレンダラでも同様のコードを書く必要があります)。
2)このアプローチでは、基本的に、「ハイライト」と言うときにアイテムレンダラーを再作成しています。このため、パフォーマンスが低下する可能性があります。シンプルなアイテムレンダラーを使用している場合、パフォーマンスへの影響。 CustomItemRenderer.mxmlの
メインアプリケーションMXML
内容
願ってhelps.In一方(上記MXMLと同じフォルダにあると仮定します)もっと簡単な方法でこれを達成できるかどうかも見ていきます。
出典
2011-05-16 12:30:48 user700284