You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:12:32