按钮的前景在属性触发器中未改变。

4
为什么这个触发器有效(当鼠标悬停在按钮上时将前景更改为“红色”)?
<Grid>
 <Grid.Resources>
  <Style TargetType="{x:Type Button}">
   <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
     <Setter Property="Foreground" Value="Red"/>
    </Trigger>
   </Style.Triggers>
  </Style>
 </Grid.Resources>
 <Button Content="Hello"/>
</Grid>

但是,当按钮的前景色被设置为一种颜色(在本例中为“蓝色”)时,不包括此触发器?

<Grid>
 <Grid.Resources>
  <Style TargetType="{x:Type Button}">
   <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
     <Setter Property="Foreground" Value="Red"/>
    </Trigger>
   </Style.Triggers>
  </Style>
 </Grid.Resources>
 <Button Foreground="Blue" Content="Hello"/>
</Grid>
3个回答

9
本地按钮值会覆盖样式。请尝试以下操作:
<Grid>

    <Grid.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="Blue"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>

    <Button Content="Hello"/>

</Grid>

4
我知道这是一篇旧帖子,但以下是解决方案(使用属性触发器)。答案:
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="Blue"/>

最合理的方法是:
<Setter Property="Foreground" Value="Blue"/>

但是..不起作用..


1
我不确定,但我认为最好删除除英语以外的特定语言句子。 - Fendy

1

只需添加一个控件模板,然后在您的样式中将 ContentPresenterTextElement.Foreground 绑定到 {TemplateBinding Foreground}

<Grid>
    <Grid.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                            <ContentPresenter TextElement.Foreground="{TemplateBinding Foreground}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>
    <Button Content="Hello"/>
</Grid>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接