c# - 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>
那么我是否必须从包中重新实现原始样式并添加悬停?
解决方案
您不能仅“覆盖”模板的一部分。它必须被定义为一个整体,这意味着您应该从GitHubMaterialDesignRaisedButton
复制样式并根据您的要求对其进行编辑,例如向触发器添加额外的设置器。IsMouseOver
推荐阅读
- javascript - React Native 不要在 componentDidMount 中使用 setState (react/no-did-mount-set-state)
- asp.net-core - ASP.NET Core 集成测试中的 WebApplicationFactory 和 TestServer
- vue.js - Nuxt js:如何在模板中显示承诺的结果?
- php - 数据没有通过形式 - laravel
- swift - 为使用 URLSession 和 RxSwift 的函数编写单元测试
- python - ä ü ö ß 等的编码
- mysql - 在 mysql 上选择我的数据库最受欢迎的目的地
- reactjs - Video.js - 在多个音轨之间切换(并在我更改时播放它们)
- python - 如何检查一个字符串中有多少个字符与另一个字符串匹配?
- python - OSError: [Errno 48] 地址已在 anki vector SDK (vectorCloud) 中使用