【问题标题】:Background color is not changing in DataTriggerDataTrigger 中的背景颜色没有变化
【发布时间】:2014-07-07 01:44:56
【问题描述】:

我在使用 datatrigger 更改 Button 的背景颜色时遇到了一些问题,但没有发生。

我的代码是这样的

<Window x:Class="DataBinding.DataTrigger2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DataTrigger2" Height="300" Width="300">
<Button Height="50" Name="btn">
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Control.Background" Value="YellowGreen"></Setter>
            <Setter Property="Control.Foreground" Value="Brown"></Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=btn, Path=IsPressed}" Value="True">
                    <Setter Property="Control.Background" Value="Purple"></Setter>
                    <Setter Property="Control.Foreground" Value="Red"></Setter>
                    <Setter Property="Control.FontSize" Value="20"></Setter>
                    <Setter Property="Control.FontWeight" Value="Light"></Setter>
                    <Setter Property="Control.Width" Value="150"></Setter>
                    <Setter Property="Control.Height" Value="50"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
    <Button.Content>
        The Gaming World Inc.
    </Button.Content>
</Button>

【问题讨论】:

    标签: wpf xaml triggers datatrigger


    【解决方案1】:

    单击鼠标时看不到Button.Background 颜色变化的原因是默认的ControlTemplate 定义了它在不同状态下的外观,例如。按下,禁用。等等。这些在ControlTemplateVisualStateManager.VisualStateGroups 部分中定义,它们可能会覆盖您的Background 更改。

    作为简单的证明,我们可以为Button 提供一个基本的ControlTemplate,而无需VisualStateManager.VisualStateGroups 部分,然后您将看到您的Background 颜色发生变化。试试这个:

    <Button Height="50" Name="btn">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="Control.Background" Value="YellowGreen"></Setter>
                    <Setter Property="Control.Foreground" Value="Brown"></Setter>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Background="{TemplateBinding Background}">
                                    <ContentPresenter />
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=btn, Path=IsPressed}" Value="True">
                            <Setter Property="Control.Background" Value="Purple"></Setter>
                            <Setter Property="Control.Foreground" Value="Red"></Setter>
                            <Setter Property="Control.FontSize" Value="20"></Setter>
                            <Setter Property="Control.FontWeight" Value="Light"></Setter>
                            <Setter Property="Control.Width" Value="150"></Setter>
                            <Setter Property="Control.Height" Value="50"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
            <Button.Content>
                The Gaming World Inc.
            </Button.Content>
        </Button>
    

    您可以在 MSDN 上的Button Styles and Templates 页面中找到Button 控件的原始/默认ControlTemplate...您可能希望将更多ControlTemplate 复制到您的Button 中看起来更像原版。

    【讨论】:

    • 我可以在控制模板中使用这个方法来改变背景吗?
    • 如果您问是否可以在ControlTemplate.Triggers 部分中使用DataTrigger,那么可以。否则,我不明白你的问题。
    猜你喜欢
    • 2011-07-21
    • 2017-04-14
    • 2021-10-02
    • 2014-09-14
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多