【问题标题】:How can I change Button color via a trigger in the button?如何通过按钮中的触发器更改按钮颜色?
【发布时间】:2018-03-30 02:55:18
【问题描述】:

这个触发器有什么问题?我在这里找到了它:http://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/ 我在 SO 上看到了类似的设置

    <Button x:Name="ColorPickerButton" Background="{Binding SelectedColor}">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

我试图分解我的意大利面条 XAML 并使其更具可读性。这是我的旧实现,它确实有效。我不喜欢它,因为它会覆盖按钮内容并覆盖似乎不必要的边框。还有它的巨大

    <Button x:Name="ColorPickerButton" Background="{Binding SelectedColor}">
        <Button.Resources>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border x:Name="Bd"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    Background="{TemplateBinding Background}"
                                    Padding="{TemplateBinding Padding}"
                                    SnapsToDevicePixels="true">
                                <GridViewRowPresenter/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="IsMouseOver" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="BorderBrush" Value="{StaticResource ColorPickerButton.MouseOver.Border}"/>
                                </MultiTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Resources>
    </Button>

【问题讨论】:

    标签: c# wpf xaml triggers


    【解决方案1】:

    您的触发器不起作用,因为按钮的默认模板有自己的触发器,当 IsMouseOver 属性设置时,它会更改根边框的背景画笔。这意味着:只要鼠标位于按钮上方,按钮控件的 Background 属性就会被其模板忽略。

    检查按钮默认样式的最简单方法是:在 Visual Studio wpf 设计器中右键单击按钮。单击“编辑模板”->“编辑副本”并选择一个位置。 在指定位置创建默认样式的副本。你会看到这样的触发器:

      <Trigger Property="IsMouseOver" Value="true">
          <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
          <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
       </Trigger>
    

    在设计师创建样式定义的基础上,它还创建了样式中使用的画笔:

         <SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
         <SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
    

    您可以更改这些画笔或上述设置器的 Value 属性,以在鼠标悬停时更改背景。 或者,您可以像在旧实现中那样创建自己的模板。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2019-10-13
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多