WPF MaterialDesign深色主题下键盘聚焦按钮阴影颜色自定义咨询
解决深色主题下MaterialDesign按钮聚焦阴影不可见的问题
你的按钮样式代码如下:
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignRaisedButton}"> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth0"/> <Style.Triggers> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth3"/> <Setter Property="md:ShadowAssist.Darken" Value="True"/> </Trigger> </Style.Triggers> </Style>
在深色主题下默认阴影为黑色,导致聚焦效果几乎不可见,你可以通过以下几种方式自定义阴影颜色:
1. 直接设置ShadowColor附加属性
MaterialDesign的ShadowAssist提供了ShadowColor附加属性,可在聚焦触发器中直接指定浅色阴影,比如绑定主题自带的高亮浅色资源:
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignRaisedButton}"> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth0"/> <Style.Triggers> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth3"/> <Setter Property="md:ShadowAssist.Darken" Value="True"/> <!-- 使用主题浅色资源作为阴影颜色 --> <Setter Property="md:ShadowAssist.ShadowColor" Value="{DynamicResource MaterialDesignPrimaryLight}"/> </Trigger> </Style.Triggers> </Style>
2. 根据主题动态切换阴影颜色
如果需要随浅色/深色主题自动切换阴影颜色,可结合ThemeAssist.IsDarkTheme属性做多条件触发器:
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignRaisedButton}"> <Setter Property="FocusVisualStyle" Value="{x:Null}" /> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth0"/> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsKeyboardFocused" Value="True"/> <Condition Property="md:ThemeAssist.IsDarkTheme" Value="True"/> </MultiTrigger.Conditions> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth3"/> <Setter Property="md:ShadowAssist.Darken" Value="True"/> <Setter Property="md:ShadowAssist.ShadowColor" Value="{DynamicResource MaterialDesignPrimaryLight}"/> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsKeyboardFocused" Value="True"/> <Condition Property="md:ThemeAssist.IsDarkTheme" Value="False"/> </MultiTrigger.Conditions> <Setter Property="md:ShadowAssist.ShadowDepth" Value="Depth3"/> <Setter Property="md:ShadowAssist.Darken" Value="True"/> <!-- 浅色主题保持默认黑色阴影 --> <Setter Property="md:ShadowAssist.ShadowColor" Value="{DynamicResource MaterialDesignShadowColor}"/> </MultiTrigger> </Style.Triggers> </Style>
3. 全局覆盖深色主题的阴影颜色
如果希望所有控件在深色主题下都使用浅色阴影,可在深色主题的资源字典中重新定义MaterialDesignShadowColor资源:
<!-- 深色主题资源字典中添加 --> <SolidColorBrush x:Key="MaterialDesignShadowColor" Color="#FFE0E0E0"/>
这样所有依赖该资源的阴影都会自动切换为浅色,无需单独修改每个控件样式。
内容的提问来源于stack exchange,提问作者stef
相关产品推荐
相关产品推荐

