如何将样式属性绑定到WPF中的项值?

时间:2013-10-16 17:50:20

标签: c# wpf binding styles treeview

我想创建一个具有'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>

我该如何解决?

2 个答案:

答案 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>