3
我想知道是否可以根據相應ViewModel中存在的屬性值來決定自定義樣式選擇器類中的樣式?在ItemContainerStyleSelector中根據ViewModel中存在的屬性值設置樣式
或者
有什麼辦法來選擇基於屬性的視圖模型的ItemContainerstyle?
我想知道是否可以根據相應ViewModel中存在的屬性值來決定自定義樣式選擇器類中的樣式?在ItemContainerStyleSelector中根據ViewModel中存在的屬性值設置樣式
或者
有什麼辦法來選擇基於屬性的視圖模型的ItemContainerstyle?
是的,ItemsControl
爲此提供了ItemContainerStyleSelector
。 ItemContainer
可能有兩種不同的情況可供選擇Style
。
在這個例子中,我們有
public class ViewModel
{
public ObservableCollection<Student> Students { get; set; }
public bool IsGood { get; set; }
}
選擇基於主視圖模型(這不同於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>
選擇基礎上的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>