/// <summary> /// Updates the control's theme to fit in with the latest Windows visuals. /// </summary> /// <param name="menu">The tool strip control to set the theme on.</param> public static void ApplyTheme(ToolStrip menu) { //Register for Theme changed messages if (ThemeMessageFilter.Instance == null) { ThemeMessageFilter filter = new ThemeMessageFilter(); filter.ThemeChanged += OnThemeChanged; } if (Environment.OSVersion.Version.Major >= 6) { //Assign our themed renderer for non-custom renderers UXThemeMenuRenderer renderer = new UXThemeMenuRenderer(); if (menu.Renderer is ToolStripProfessionalRenderer) { menu.Disposed += OnThemedMenuDisposed; ThemedMenus.Add(menu, renderer); if (Active) { menu.Renderer = renderer; } } } foreach (ToolStripItem item in menu.Items) { ToolStripMenuItem toolStripItem = item as ToolStripMenuItem; if (toolStripItem != null) { ApplyTheme(toolStripItem); } } }
/// <summary> /// Clean up the reference to the menu when the menu is disposed so we no /// longer track the menu for theme changes. /// </summary> private static void OnThemedMenuDisposed(object sender, EventArgs e) { ThemedMenus.Remove(sender as ToolStrip); }