【问题标题】:WPF - Change button templated text color on DataTriggerWPF - 更改 DataTrigger 上的按钮模板文本颜色
【发布时间】:2019-04-05 23:54:21
【问题描述】:

我有一个带有控件模板集的按钮(包括一些控件模板触发器),我想在 DataTrigger 上更改其文本颜色。我读到我无法访问模板的 TargetName(“theContent”),因为它有自己的范围,那么我该如何实现呢?

  <Button BorderThickness="0" MaxWidth="94" Height="26" Margin="1,0,0,0">
        <Button.Style>
            <Style TargetType="Button">                        
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border x:Name="theBorder" CornerRadius="15" BorderThickness="0" Background="{TemplateBinding Background}">
                                <Label x:Name="theContent" VerticalContentAlignment="Center" Foreground="White" FontWeight="Bold">
                                    <TextBlock Text="..." TextTrimming="CharacterEllipsis"></TextBlock>
                                </Label>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="False">
                                    <Setter Property="Background" Value="#1A65AF"></Setter>
                                </Trigger>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Background" Value="#4d87c0"></Setter>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Setter Property="Background" Value="#004b95"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{...}" Value="..."></Condition>
                            <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled}" Value="False"></Condition>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="#ad4811"/>
                        <Setter Property="Foreground" Value="#7F7F7F" /> // does nothing
                        <Setter TargetName="theContent" Property="Foreground" Value="#7F7F7F" /> // target not found
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
        <!--<Button.Content>
            <Label x:Name="theContent" VerticalContentAlignment="Center" Foreground="White" FontWeight="Bold">
                <TextBlock Text="..." TextTrimming="CharacterEllipsis"></TextBlock>
            </Label>
        </Button.Content>-->
    </Button>

我尝试过但不起作用的 2 个二传手是:

<Setter Property="Foreground" Value="#7F7F7F" /> // does nothing
<Setter TargetName="theContent" Property="Foreground" Value="#7F7F7F" /> // target not found

【问题讨论】:

  • 为什么不为此使用按钮的Foreground 属性?模板-将控件模板中标签的前景与按钮Foreground 属性绑定。然后就可以在按钮样式中操作按钮前景(=label foreground)...

标签: wpf controltemplate multidatatrigger


【解决方案1】:

在您的控件模板中,您只需使用TemplateBinding,而不是将值硬编码为White

<Border x:Name="theBorder" CornerRadius="15" BorderThickness="0" Background="{TemplateBinding Background}">
  <Label x:Name="theContent" VerticalContentAlignment="Center" Foreground="{TemplateBinding Foreground}" FontWeight="Bold">
    <TextBlock Text="..." TextTrimming="CharacterEllipsis"></TextBlock>
  </Label>
</Border>

这样做将遵循按钮Foreground 属性。通常,如果您的ControlTemplate 中的任何属性需要动态更改,您将需要使用TemplateBinding(例如FontWeight 属性)。现在您的 StyleTrigger 设置器将按预期工作。

顺便说一句,Foreground="{TemplateBinding Foreground}" 只是

的简写
Foreground="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多