繁体   English   中英

C#WPF DataTemplate在属性上设置背景颜色

[英]C# WPF DataTemplate set background color on property

我有一个TreeView包含一堆这些验证类。 最终,如果类的Success属性为true,我想将项目的背景颜色更改为绿色,如果属性为false,则将其更改为Red。

public class Verify : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public string Name { get { return "Dummy Text"; } }

    private bool success;
    public bool Success
    {
        get { return success; }
        set { success = value; NotifyPropertyChanged(); }
    }

    public Verify()
    {
        Success = true; /* Test that the background changes color */
    }
}

这是我在TreeView中到目前为止所处的位置。 为了测试我已经创建了一个ObservableCollection<Verify> VerifyWriteObservableCollection<Verify> VerifyWrite添加了几个条目。 这就是我的TreeView绑定的内容。 我希望TreeView中的所有条目都是绿色的,因为我已将Success设置为true,但背景未设置为任何内容。

        <TreeViewItem Header="Verify Write" IsExpanded="True" ItemsSource="{Binding VerifyWrite}">
            <TreeViewItem.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>

                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Success}" Value="True">
                            <Setter Property="TreeViewItem.Background" Value="Green"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </TreeViewItem.ItemTemplate>
        </TreeViewItem>

我很新,很迷失在这个WPF中。

模板内的触发器仅适用于模板内的元素。 为此你需要命名这些元素:

<DataTemplate>
    <Grid x:Name="ItemBackground">
        <TextBlock Text="{Binding Name}"/>
    </Grid>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Success}" Value="True">
            <Setter TargetName="ItemBackground" Property="Background" Value="Green"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

但是这种方法不允许你为整个项目着色。 为此,您应该像这样使用ItemContainerStyle

<TreeViewItem Header="Verify Write" IsExpanded="True" ItemsSource="{Binding VerifyWrite}">
    <TreeViewItem.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Success}" Value="True">
                    <Setter Property="Background" Value="Green"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TreeViewItem.ItemContainerStyle>
</TreeViewItem>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM