DataTrigger根据附加属性值更改

时间:2012-01-31 15:50:24

标签: wpf datatemplate attached-properties

我正在尝试根据元素的AttachedProperty值更改DataTemplate中的background属性, 我没有得到任何绑定错误,但背景字段保持其默认值。 什么是蠢事?

查看:

<ContentControl common:IsOpen={Binding IsOpenValue} ContentTemplate="{StaticResource MyTemplate}"/>

的DataTemplate:

<DataTemplate x:Key="MyTemplate">
  <Border Width="20" Height="20" Name="TheName"/>

  <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding (common:IsOpen), RelativeSource={RelativeSource Self}}" Value=common:IsOpenEnum.Open>
      <Setter Property="Background" TargetName="TheName" Value="Red"/>
   </DataTrigger>

   <DataTrigger Binding="{Binding (common:IsOpen), RelativeSource={RelativeSource Self}}" Value=common:IsOpenEnum.Closed>
        <Setter Property="Background" TargetName="TheName" Value="Green"/>
   </DataTrigger>

  </DataTemplate.Triggers>
</DataTemplate>

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

绑定到附加属性时必须使用完整语法。类似的东西:

<DataTrigger Binding="{Binding Path=(common:IsOpen), Rela....

接下来,当您在RelativeSource={RelativeSource Self}上实际查找该属性时,使用ContentPresenter可能会为您提供ContentControl控件模板中的ContentControl 。相反,使用

....RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}...

最后,为简洁起见,请从值中删除common:IsOpenEnum.。只使用枚举的值:

....Value="Open">

[我认为缺少这个值的引用是一个小故障,它们确实出现在实际代码中]