2009-11-15 14 views
5

私はListBoxを持っています。今度は、の最初のアイテムは、赤い背景と他のアイテムの白い背景を持つような方法でDataTemplateを書きたいと思います。私はDataTriggerを書く必要があると思いますが、私はDataTemplateが最初の項目に適用されているかどうかを判断できません。DataTemplateから現在のListBoxアイテムのインデックスを調べる方法は?

<Style TargetType="{x:Type ListBoxItem}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Background" Value="LightBlue"></Setter> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="LightGreen"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

楽しむ:

答えて

7

項目のコントロールを使用すると、

に対してスタイルに使用交代数は、ルックhereを持っています!

+1

これは素晴らしい機能です。情報ありがとうございます。しかし、私は**最初のアイテムだけでなく、赤い背景を持つ必要があります(itemIndex%AlternationCount)== 0の各アイテムではありません。もちろん、私はItemsSource.CountにAlternationCountをバインドすることはできますが、この? – levanovd

+0

あなたが概説するものは受け入れ可能な音、xamlのすべてです。それは仕事を完了し、あなたはより良いものに移行することができます。他の誰かがより洗練されたソリューションを思いつくかもしれません。 現在のアイテムへの最初のバインディングバインディングでマルチバインドを実行し、2番目のバインドで上位ボックスのアイテムソースにバインドすることができます。あなたのコンバーターでは、アイテムのインデックスが何だったかを確認することができます。上記のソリューションはすべてxamlにあります。私はいつも読みやすさを優先します。コンバーターにロックされていないxamlの明瞭な場所 –

+0

AlternationCountをItemsSource.Countにバインドする必要はありません。XAMLのInt32.MaxValueに設定するだけです。 (私はAlternateCount = "2147483647"を "{x:Static sys:Int32.Maxvalue}"よりも優先します。なぜなら、より高速で2^31-1がほとんどのプログラマにとって認識可能なからです)。 –

関連する問題