Windows窗体按钮背景透明

Posted

技术标签:

【中文标题】Windows窗体按钮背景透明【英文标题】:Windows forms button background transparent 【发布时间】:2021-05-20 09:23:26 【问题描述】:

我有带有 ContentControl 的 WPF 应用程序,其中内容是 WindowsFormsHost 和带有自定义面板的 Child,它呈现 SDL 流。现在我添加了按钮来禁用/启用流的音频。一切正常,但我无法使按钮图标透明。我怎样才能做到这一点?有可能吗?

AudioButton = new System.Windows.Forms.Button()

   Enabled = AudioButtonEnabled,
   BackColor = Color.Transparent,
   Image = Image.FromFile(@".\Images\audioDisabled.png"),
   Width = 30,
   Height = 30,
   FlatStyle = System.Windows.Forms.FlatStyle.Flat
;
AudioButton.FlatAppearance.BorderSize = 0;
AudioButton.Click += (object sender, EventArgs e) =>

   
;
SDLRenderer.AddButton(AudioButton);

图像(图标)也是透明的。

【问题讨论】:

【参考方案1】:

解决方法可以是创建自定义 WinForms 按钮,覆盖 OnPaint 事件并通过调用 Bitmap.MakeTransparent() 使指定颜色对位图透明

public class CustomButton : Button

    private Color TransparentColor;

    public CustomButton() : base()
    
        TransparentColor = Color.FromArgb(192, 192, 192);
    
    protected override void OnPaint(PaintEventArgs e)
    
        if (this.Image != null)
        
            Bitmap bmp = ((Bitmap)this.Image);
            bmp.MakeTransparent(TransparentColor);
            int x = (this.Width - bmp.Width) / 2;
            int y = (this.Height - bmp.Height) / 2;
            e.Graphics.DrawImage(bmp, x, y);
        
        base.OnPaint(e);
    

【讨论】:

以上是关于Windows窗体按钮背景透明的主要内容,如果未能解决你的问题,请参考以下文章

Windows界面编程第五篇 静态控件背景透明化

delphi 怎样绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件 不透明

Delphi如何制造透明背景窗体

VB.NET的按钮怎么弄成透明的。

Delphi如何制作透明背景窗体

WinForm窗体,在VS2010上背景颜色不能设置透明,我把背景颜色和TransparencyK