为什么触发器集合不允许数据触发器

时间:2014-01-10 05:49:03

标签: wpf triggers

为什么触发器集合不允许数据触发器和除事件触发器之外的其他触发器?

<StackPanel Orientation="Horizontal">
    <Label Name="LblHeader"
                           Margin="10,0,10,0"
                           Content="Test"
                           FontWeight="Bold"
                           Foreground="SteelBlue" />
    <Button Name="BtnAttach" Content="_Attach"/>

    <StackPanel.Triggers>
        <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel }}" Value="False">
            <Setter TargetName="LblHeader" Property="Label.Foreground" Value="Gray" />
        </DataTrigger>
    </StackPanel.Triggers>
</StackPanel>

1 个答案:

答案 0 :(得分:1)

可以在四个级别指定触发器....

  1. ControlTemplate等级
  2. DataTemplate
  3. Style等级
  4. UIElement等级。
  5. DataTrigger仅在前三个级别工作。理想情况下,它只应在第二种情况下使用,即StyleDataTemplate

    但首先你可以用这段代码澄清你的意图吗?

    当StackPanel被禁用时,您是否要将Label文本显示为Gray

    如果是IsEnabled属性是可继承的依赖项属性,这意味着它将应用于被禁用的父视觉树下的所有元素。

    因此,如果StackPanel被禁用,那么Label就会被禁用。

    在这种情况下,PropertyTrigger就足够了......

     <StackPanel Orientation="Horizontal">
        <Label Name="LblHeader"
               Margin="10,0,10,0"
               Content="Test"
               FontWeight="Bold">
          <Label.Style>
            <Style TargetType="Label"> 
              <Setter Property="Foreground" Value="SteelBlue" />
              <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="Gray" />
                </Trigger>
              </Style.Triggers>
            </Style>
          </Label.Style>
        </Label>  
        <Button Name="BtnAttach" Content="_Attach"/>        
    </StackPanel>