gpt4 book ai didi

wpf - 根据 ViewModel 中存在的属性值设置 ItemContainerStyleSelector 中的样式

转载 作者:行者123 更新时间:2023-12-03 02:02:49 26 4
gpt4 key购买 nike

我想知道你可以根据相应 ViewModel 中存在的属性值来决定自定义样式选择器类中的样式吗?

或者

有没有办法根据ViewModel中的Property来选择ItemContainerstyle?

最佳答案

是的,ItemsControl为此提供了ItemContainerStyleSelector。为 ItemContainer 选择 Style 可能有两种不同的场景。

在这个例子中,我们有

public class ViewModel
{
public ObservableCollection<Student> Students { get; set; }
public bool IsGood { get; set; }
}
  1. 基于主 ViewModel 进行选择(这与 ItemsSource 不同)。为此使用触发器

       <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. 根据学生的属性(例如姓名)进行选择。我们必须在这里使用 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>

关于wpf - 根据 ViewModel 中存在的属性值设置 ItemContainerStyleSelector 中的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38610013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com