基于文本属性的触发器不起作用

时间:2014-03-13 06:56:39

标签: wpf silverlight xaml

以下是我正在处理的xaml:

<TextBlock Text="{Binding Title}" Margin="10,0,0,0" VerticalAlignment="Center">
    <TextBlock.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <Trigger Property="Text" Value="">
                    <Setter Property="Margin" Value="0" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Resources>
</TextBlock>

当text =“”我想清理边距。但不知怎的,它不起作用。

1 个答案:

答案 0 :(得分:3)

您必须将Margin="10,0,0,0" TextBlock 移至Style的设置者:

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Margin" Value="10,0,0,0" /> 

    <Style.Triggers>
        <Trigger Property="Text" Value="">
            <Setter Property="Margin" Value="0" />
        </Trigger>
    </Style.Triggers>
</Style>

因为本地值在样式设置器和触发器上有 higher precedence 顺序:

  1. 物业系统强制。

  2. 动态动画或具有保留行为的动画。

    3. Local value.

  3. TemplatedParent模板属性。

  4. 隐含的风格。

    6. Style triggers.

  5. 模板触发器。

    8. Style setters.

  6. ...

    有关详细信息,请参阅:

    MSDN: Dependency Property Value Precedence