2016-07-27 55 views

回答

7

是的,ItemsControl爲此提供了ItemContainerStyleSelectorItemContainer可能有兩種不同的情況可供選擇Style

在這個例子中,我們有

public class ViewModel 
{ 
    public ObservableCollection<Student> Students { get; set; } 
    public bool IsGood { get; set; } 
} 
  1. 選擇基於主視圖模型(這不同於ItemsSource)。爲此,請使用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> 
    
  2. 選擇基礎上的Student屬性(例如,名稱)。我們必須在這裏使用ItemsControl.ItemContainerStyleSelector

    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>