none
请问这个textblock的触发器为什么被覆盖了。 RRS feed

  • 问题

  • <TextBlock Text="注册账号" Foreground="#FFB814"  Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" 
                       Margin="5 5 15 5" Style="{DynamicResource TextBlockStyle1}"/> 
    <Style x:Key="TextBlockStyle1" TargetType="{x:Type TextBlock}">
                <Setter Property="TextWrapping" Value="NoWrap"/>
                <Setter Property="TextTrimming" Value="None"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Yellow"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

    这个在运行的时候,触发器是没有正常运行的,他的颜色没有发生变化,还是旧的颜色。

    但是如果我没有设置默认颜色,触发器就会正常触发,我有多个文本框要用这个触发器,所以不想每个textblock都写一个触发器。

    <TextBlock Text="游客登录" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right" 
                       VerticalAlignment="Center" Style="{DynamicResource TextBlockStyle1}"/>

    这样就可以正常触发触发器,让文字变色。

    或者这样也可以

    <TextBlock Text="注册账号"  Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" 
                       Margin="5 5 15 5" ><!--Foreground="#34AFF8"-->
                <TextBlock.Style>
                    <Style>
                        <Setter Property="TextBlock.Foreground"  Value="Gold"/>
                        <Style.Triggers>
                            <Trigger Property="TextBlock.IsMouseOver" Value="True">
                                <Setter Property="TextBlock.Foreground" Value="Yellow"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>

    2016年9月18日 5:33

答案

  • ?????

    • 已建议为答案 DotNet Wang 2016年9月19日 6:56
    • 已标记为答案 彭123 2016年9月21日 2:37
    • 已编辑 [-] 2018年1月11日 12:12
    2016年9月19日 6:47
  • 本地值的优先级当然要比Style高。一个变通的方法是改用Binding。

    <Grid>
        <Grid.Resources>
            <Style x:Key="TextBlockStyle1" TargetType="{x:Type TextBlock}">
                <Setter Property="TextWrapping" Value="NoWrap"/>
                <Setter Property="TextTrimming" Value="None"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="False">
                        <Setter Property="Foreground" Value="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Yellow"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Grid.Resources>
        <TextBlock Text="注册账号" Tag="#FFB814"  Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Margin="5 5 15 5" Style="{StaticResource TextBlockStyle1}"/>
    </Grid>

     <Setter Property="Foreground" Value="{Binding Tag, RelativeSource={RelativeSource Mode=Self}}"/>
                   

    • 已标记为答案 彭123 2016年9月21日 2:38
    2016年9月21日 2:37

全部回复

  • ?????

    • 已建议为答案 DotNet Wang 2016年9月19日 6:56
    • 已标记为答案 彭123 2016年9月21日 2:37
    • 已编辑 [-] 2018年1月11日 12:12
    2016年9月19日 6:47
  • 您好 彭123,

    >>"这个在运行的时候,触发器是没有正常运行的,他的颜色没有发生变化,还是旧的颜色。"

    导致这个问题的原因是依赖性的值的确定有一个优先级的问题。

    控件常常在主题中将触发器行为定义为其默认样式的一部分。 为控件设置本地属性可能会阻止触发器从视觉或行为上响应用户驱动的事件。 属性触发器最常用于控件或状态属性,如 IsSelected。 例如,默认情况下,当禁用 Button 时(IsEnabled 的触发器是 false),主题样式中的 Foreground 值将导致控件“变灰”。 但是,如果您设置了本地 Foreground 值,本地属性集将优先于普通灰显颜色,即使在这个属性触发的方案中也是如此。 为具有主题级触发器行为的属性设置值时要倍加小心,并要确保不要过度妨碍该控件应有的用户体验。

    详情请参考以下文档。

    依赖项属性值优先级

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年9月19日 6:59
  • 本地值的优先级当然要比Style高。一个变通的方法是改用Binding。

    <Grid>
        <Grid.Resources>
            <Style x:Key="TextBlockStyle1" TargetType="{x:Type TextBlock}">
                <Setter Property="TextWrapping" Value="NoWrap"/>
                <Setter Property="TextTrimming" Value="None"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="False">
                        <Setter Property="Foreground" Value="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Yellow"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Grid.Resources>
        <TextBlock Text="注册账号" Tag="#FFB814"  Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Margin="5 5 15 5" Style="{StaticResource TextBlockStyle1}"/>
    </Grid>

     <Setter Property="Foreground" Value="{Binding Tag, RelativeSource={RelativeSource Mode=Self}}"/>
                   

    • 已标记为答案 彭123 2016年9月21日 2:38
    2016年9月21日 2:37