Ja, ItemsControl
bietet ItemContainerStyleSelector
dafür. Es könnte zwei verschiedene Szenarien für die Auswahl Style
für ItemContainer
geben.
In diesem Beispiel haben wir
public class ViewModel
{
public ObservableCollection<Student> Students { get; set; }
public bool IsGood { get; set; }
}
auf Hauptansichtsmodell basiert Aussuchen (dies aus ItemsSource
unterscheidet). Verwenden Sie hierzu Trigger
.
<ItemsControl.Style>
<Style TargetType="ItemsControl">
<Style.Triggers>
<DataTrigger Binding="{Binding IsGood}" Value="True">
<Setter Property="ItemContainerStyle" Value="{DynamicResource Style1Key}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.Style>
auf einem Grundstück (ex, Name) von Student
Aussuchen basiert. Wir müssen ItemsControl.ItemContainerStyleSelector
hier verwenden.
public class MyStyleSelector : StyleSelector
{
public Style Style1 { get; set; }
public Style Style2 { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
Student s = (Student)item;
if(s.Name == "Gopi")
return Style1;
else
return Style2;
}
}
XAML
<Window.Resources>
<Style x:Key="Style1Key">
<Setter Property="Control.Opacity" Value="0.3"/>
</Style>
<Style x:Key="Style2Key">
<Setter Property="Control.Opacity" Value="0.7"/>
</Style>
</Window.Resources>
<ItemsControl ItemsSource="{Binding Students}">
...
<ItemsControl.ItemContainerStyleSelector>
<local:MyStyleSelector Style1="{StaticResource Style1Key}" Style2="{StaticResource Style2Key}"/>
</ItemsControl.ItemContainerStyleSelector>
...
</ItemsControl>