为什么必须将WPF触发器声明为样式(甚至是内联)?

时间:2014-07-09 17:21:13

标签: wpf

我不明白为什么WPF允许我写两个

<Grid>
 <Grid.Triggers>
  <DataTrigger Binding="{Binding HasNeverBeenSeen}" Value="true">
   <Setter Property="Background" Value="Red"/>
  </DataTrigger>
 </Grid.Triggers>
</Grid>

<Grid>
 <Grid.Style>
  <Style TargetType="{x:Type Grid}">
   <Style.Triggers>
    <DataTrigger Binding="{Binding HasNeverBeenSeen}" Value="true">
     <Setter Property="Background" Value="Red"/>
    </DataTrigger>
   </Style.Triggers>
  </Style>
 </Grid.Style>
</Grid>

但只有第二个似乎有效。如果我们必须使用Style?

,为什么Grid元素有Triggers标记?

由于

1 个答案:

答案 0 :(得分:3)

对你的问题的简短回答是因为这是WPF团队的设计方式。

FrameworkElement.Triggers 只能包含 EventTriggers ,尽管属性是TriggerBase的集合。它也在MSDN page明确说明:

  

请注意,仅在元素上建立的触发器集合   支持EventTrigger,而不是属性触发器(Trigger)。如果您需要   属性触发器,您必须将它们放在样式或模板中   然后直接将该样式或模板分配给元素   通过Style属性,或间接通过隐式样式   参考