首页 > 解决方案 > WPF Material Design 按钮悬停

问题描述

我正在为我的 WPF 项目使用Material Design,现在我想为按钮的悬停状态设置背景颜色。从代码中可以看出,实现是通过 ProgressBar、Ripple 和 Border 实现的。

如果我尝试覆盖样式,我最终会得到一个不可见的按钮:

<Style TargetType="{x:Type Button}"
       BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <Setter Property="Background"
            Value="{StaticResource MainColorSolidBrush}" />
    <Setter Property="Foreground"
            Value="{StaticResource TextColorLightSolidBrush}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">

                <ControlTemplate.Triggers>

                    <!--Hover-->
                    <Trigger Property="IsMouseOver"
                             Value="true">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                                    To="{StaticResource SubColor}"
                                                    FillBehavior="HoldEnd"
                                                    Duration="{StaticResource HoverStartDuration}" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                                    To="{StaticResource MainColor}"
                                                    FillBehavior="Stop"
                                                    Duration="{StaticResource HoverEndDuration}" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>

                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

那么我是否必须从包中重新实现原始样式并添加悬停?

标签: c#wpfbuttonmaterial-design

解决方案


您不能仅“覆盖”模板的一部分。它必须被定义为一个整体,这意味着您应该从GitHubMaterialDesignRaisedButton复制样式并根据您的要求对其进行编辑,例如向触发器添加额外的设置器。IsMouseOver


推荐阅读