[英]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> VerifyWrite
并ObservableCollection<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.