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

PowerShell中DateTimePicker控件自定义样式/颜色不生效如何解决

问题核心原因

调用[System.Windows.Forms.Application]::EnableVisualStyles()启用系统视觉样式后,DateTimePicker的大部分颜色属性会被系统主题强制覆盖,这是WinForm控件的原生特性,和你写的配置代码本身无关。

可行的解决方法

  • 方法1:禁用视觉样式(简单快速)
    直接注释或删除[System.Windows.Forms.Application]::EnableVisualStyles()这行代码即可,你现有的颜色配置就能正常生效,缺点是所有控件都会切换为无主题的经典样式。
  • 方法2:自定义绘制控件(保留视觉样式的前提下改色)
    给DateTimePicker开启自定义绘制模式,通过绘制事件手动渲染控件样式:
    # 开启自定义绘制模式
    $BillDate.DrawMode = [System.Windows.Forms.DateTimePickerDrawMode]::OwnerDrawFixed
    # 绑定绘制事件
    $BillDate.Add_DrawItem({
        param($sender, $e)
        # 绘制背景
        $e.Graphics.FillRectangle([System.Drawing.Brushes]::Red, $e.Bounds)
        # 绘制文本
        $e.Graphics.DrawString($sender.Text, $sender.Font, [System.Drawing.Brushes]::White, $e.Bounds.X, $e.Bounds.Y)
    })
    
  • 方法3:单独修改下拉日历面板样式
    如果只是下拉的日历面板颜色不生效,可以通过反射拿到内部的MonthCalendar实例单独设置样式:
    $BillDate.Add_DropDown({
        $cal = $sender.GetType().GetField("calendar", [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Instance).GetValue($sender)
        if ($cal -is [System.Windows.Forms.MonthCalendar]) {
            $cal.TitleBackColor = [System.Drawing.Color]::FromArgb(33,35,50)
            $cal.TitleForeColor = [System.Drawing.Color]::White
            $cal.BackColor = [System.Drawing.Color]::FromArgb(33,35,50)
            $cal.ForeColor = [System.Drawing.Color]::White
        }
    })
    

额外注意点

  • 使用RGB自定义颜色时不要直接写字符串,要调用[System.Drawing.Color]::FromArgb(33,35,50)生成标准颜色对象,避免部分场景下类型识别错误。
  • PS Studio调试运行前记得清理缓存,避免旧代码残留导致配置不生效。

内容的提问来源于stack exchange,提问作者DeadLink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:45:02