我想创建一个具有'ItemsSource = ObservableCollection ...“的TreeView 我为TreeViewItem创建了一个Style,它包含DataGrid,其中的控件绑定到ObservableCollection中的项目。例如,绑定到项的属性的CheckBox。
我想创建一个Trigger,如果item属性具有特定值,它将更改控件的属性值:
<Style TargetType="{x:Type TreeViewItem}" x:Key="GridItemStyle" x:Name="GridItemStyle2">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Border Background="Red" BorderBrush="Yellow" BorderThickness="3" Margin="2,10,0,0">
<StackPanel Background="Red" Margin="10,10,10,10" Orientation="Horizontal">
<StackPanel.Triggers>
<Trigger Property="{Binding IsSucceed}" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</StackPanel.Triggers>
<TextBlock Margin="0,0,10,0" Text="{Binding Path=time, StringFormat={}\{0:dd/MM/yyyy hh:mm:ss:fff\}, Mode=OneWay}"/>
<TextBlock Margin="0,0,10,0" Text="{Binding milisecond}"/>
<TextBlock Margin="0,0,10,0" Text="{Binding address}"/>
<TextBlock Margin="0,0,10,0" Text="{Binding IsSucceed}"/>
<TextBlock Margin="0,0,10,0" Text="{Binding statues}"/>
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
由于触发器而在运行时获取异常:
<Trigger Property="{Binding IsSucceed}" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
我该如何解决?
答案 0 :(得分:1)
不要设置StackPanel.Triggers
,设置StackPanel.Style
,然后设置Style.Triggers
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSucceed}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
答案 1 :(得分:0)
将触发器更改为 DataTrigger ,如果您希望从Control获取属性(依赖关系属性),并使用DataTrigger,则使用触发器您将绑定绑定到ViewModel的属性,该ViewModel是Control
的DataContext注意: DataTriggers也可以绑定到DependencyProperties。
<DataTrigger Binding={Binding IsSucceed}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>