How do I create a transparent background in eto with C#?

I’ve tried many methods but can’t seem to make the background transparent. Can you help me with this using C#?

using Rhino.PlugIns;
using Eto.Forms;
using Eto.Drawing;
using System;
using System.Runtime.InteropServices;
using System.Drawing; // System.Drawing.Common for per-pixel bitmap rendering

namespace RadialMenuPlugin.Controls
{
    public class TransparentForm : Form
    {
        protected PlugIn _MainPlugin;

        public TransparentForm(PlugIn plugin) : base()
        {
            Title = "Radial Menu";
            WindowStyle = WindowStyle.None;
            AutoSize = false;
            Resizable = false;
            ShowActivated = false; // Important for WPF transparency
            Padding = new Padding(0);
            MovableByWindowBackground = false;

            // Eto chỉ định là trong suốt
            BackgroundColor = Colors.Transparent;

            // User's exact WPF transparency approach
            Styles.Add<Panel>("transparent", control =>
            {
                try
                {
                    var wpfWindow = (System.Windows.Window)control.ControlObject;
                    ApplyTransparency(control, wpfWindow);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine($"Direct WPF cast failed: {ex.Message}");
                    // Fallback to reflection approach
                    TryApplyWpfTransparencyReflection(control);
                }
            });
            
            // Create transparent panel and apply the style
            var transparentPanel = new Panel();
            transparentPanel.Style = "transparent";
            Content = transparentPanel;
            
            _MainPlugin = plugin;

            // Windows-specific setup sau khi load
            Load += OnFormLoad;

            // ESC để đóng
            KeyUp += (s, e) =>
            {
                if (e.Key == Keys.Escape)
                    _OnEscapePressed(s, e);
            };
        }

        public void KeyPress(KeyEventArgs e)
        {
            OnKeyDown(e);
        }

        /// <summary>
        /// User's exact ApplyTransparency method for perfect WPF transparency
        /// </summary>
        /// <param name="control">The Panel control</param>
        /// <param name="window">The WPF window</param>
        private void ApplyTransparency(Panel control, System.Windows.Window window)
        {
            try
            {
                control.BackgroundColor = Eto.Drawing.Colors.Transparent;
                window.AllowsTransparency = true;
                window.Background = System.Windows.Media.Brushes.Transparent;
                window.Topmost = true;
                window.ShowActivated = false;
                
                System.Diagnostics.Debug.WriteLine("✅ User's exact WPF transparency method applied!");
                System.Diagnostics.Debug.WriteLine("   - control.BackgroundColor = Transparent");
                System.Diagnostics.Debug.WriteLine("   - window.AllowsTransparency = true");
                System.Diagnostics.Debug.WriteLine("   - window.Background = Brushes.Transparent");
                System.Diagnostics.Debug.WriteLine("   - window.Topmost = true");
                System.Diagnostics.Debug.WriteLine("   - window.ShowActivated = false");
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine($"ApplyTransparency failed: {ex.Message}");
            }
        }

        /// <summary>
        /// Reflection-based fallback for WPF transparency when direct cast fails
        /// </summary>
        /// <param name="control">The Panel control to apply transparency to</param>
        private void TryApplyWpfTransparencyReflection(Panel control)
        {
            try
            {
                var controlObject = control.ControlObject;
                
                // Check if the underlying control is a WPF Window
                if (controlObject != null && controlObject.GetType().FullName.Contains("System.Windows.Window"))
                {
                    // Cast to System.Windows.Window using reflection
                    dynamic wpfWindow = controlObject;
                    
                    // Apply the same transparency settings
                    control.BackgroundColor = Eto.Drawing.Colors.Transparent;
                    wpfWindow.AllowsTransparency = true;
                    
                    // Set WPF transparent background
                    var brushesType = Type.GetType("System.Windows.Media.Brushes, PresentationCore");
                    if (brushesType != null)
                    {
                        var transparentBrush = brushesType.GetProperty("Transparent")?.GetValue(null);
                        if (transparentBrush != null)
                        {
                            wpfWindow.Background = transparentBrush;
                        }
                    }
                    
                    wpfWindow.Topmost = true;
                    wpfWindow.ShowActivated = false;
                    
                    System.Diagnostics.Debug.WriteLine("✅ Reflection-based WPF transparency applied successfully");
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine($"Reflection WPF transparency failed: {ex.Message}");
            }
        }

        private void OnFormLoad(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("Form loaded - WPF transparency should be active");
            System.Diagnostics.Debug.WriteLine("If background is still visible, the underlying platform may not be WPF");
        }

        protected void _OnMouseMove(object sender, MouseEventArgs e)
        {
            if (!HasFocus)
                Focus();
        }

        protected virtual void _OnCloseClickEvent(object sender)
        {
            Visible = false;
        }

        protected virtual void _OnEscapePressed(object sender, KeyEventArgs e) { }
    }
}