private void OnMoreColorsClick(object sender, RoutedEventArgs e) { if (this.MoreColorsExecuting != null) { var args = new MoreColorsExecutingEventArgs(); this.MoreColorsExecuting(this, args); if (!args.Canceled) { var color = args.Color; if (RecentColors.Contains(color)) { RecentColors.Remove(color); } RecentColors.Insert(0, color); this.recentColorsListBox.SelectedIndex = 0; } } else { #pragma warning disable 618 var chooseColor = new NativeMethods.CHOOSECOLOR(); var wnd = Window.GetWindow(this); if (wnd != null) { chooseColor.hwndOwner = new WindowInteropHelper(wnd).Handle; } chooseColor.Flags = Constants.CC_ANYCOLOR; if (customColors == IntPtr.Zero) { // Set custom colors) for (var i = 0; i < this.colorsArray.Length; i++) { this.colorsArray[i] = 0x00FFFFFF; } customColors = GCHandle.Alloc(this.colorsArray, GCHandleType.Pinned).AddrOfPinnedObject(); } chooseColor.lpCustColors = customColors; if (NativeMethods.ChooseColor(chooseColor)) { var color = ConvertFromWin32Color(chooseColor.rgbResult); if (RecentColors.Contains(color)) { RecentColors.Remove(color); } RecentColors.Insert(0, color); this.recentColorsListBox.SelectedIndex = 0; } #pragma warning restore 618 } }