我有一个TreeView,其中包含许多此类Verify类。最终,如果类的Success属性为true,我想将项目的背景颜色更改为Green,如果该属性为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
并向其中添加了几个条目。这就是我的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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句