やりたいこと
タイトルにあるようにItemsControlのDataTemplateにAlternationIndexを条件としたTriggerをセットした。
View.xaml
<ItemsControl
AlternationCount="{x:Static s:Int32.MaxValue}"
ItemsSource="{Binding List}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label
x:Name="label"
Content="{Binding Text, Mode=TwoWay}"/>
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="5">
<Setter TargetName="label" Property="Foreground" Value="black" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
AlternationIndexを条件にすることで、Valueで設定したItemだけプロパティを設定できる。このValueを動的にしたい。。
試行錯誤の結果
Xaml上ではうまくいかず。。
DataTemplateをコードビハインドにすべて移すことでなんとかなった。
View.xaml.cs
//Trigger作成
var trigger = new Trigger();
trigger.Property = ItemsControl.AlternationIndexProperty;
trigger.Value = value;//ここをコードビハインドで設定できる
trigger.Setters.Add(new Setter(Label.ForegroundProperty, new SolidColorBrush(Colors.Black), "label1"));
//Labelコントロールのフレームワークを作成
var label = new FrameworkElementFactory(typeof(Label));
Binding binding = new Binding("Text");
label.SetBinding(Label.ContentProperty, binding);
label.Name = "label1";
//TriggerとLabelをDataTemplateにセット
var dataTemplate = new DataTemplate(typeof(ItemsControl));
dataTemplate.VisualTree = label;
dataTemplate.Triggers.Add(trigger);
Items.ItemTemplate = dataTemplate;
Xamlのみで完結できる方法探してます。。