Quellcode durchsuchen

修复拾色器bug

liufei vor 3 Jahren
Ursprung
Commit
b0066939dd

+ 15 - 9
Control/UserControls/Config/ThemeControl.xaml

@@ -3,7 +3,6 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:GeekDesk.Control.UserControls.Config"
              xmlns:hc="https://handyorg.github.io/handycontrol"
              mc:Ignorable="d" 
              Background="Transparent"
@@ -133,20 +132,27 @@
                 <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
                     <TextBlock VerticalAlignment="Center" Text="图标字体颜色:" />
                     <TextBlock VerticalAlignment="Center" Text="{Binding TextColor}" Width="100"/>
-                    <Button Content="选择"  Click="ColorButton_Click"/>
+                    <Button Content="选择" Margin="0,-10,0,0"  Click="ColorButton_Click"/>
                 </hc:UniformSpacingPanel>
             </StackPanel>
         </Grid>
-            
-        <StackPanel x:Name="ColorPanel" Visibility="Collapsed" VerticalAlignment="Center">
+
+        <StackPanel x:Name="ColorPanel" Panel.ZIndex="1" 
+                    Visibility="Collapsed"
+                    Height="500"
+                    Width="450"
+                    VerticalAlignment="Center">
             <StackPanel.Background>
                 <SolidColorBrush Color="AliceBlue" Opacity="0"/>
             </StackPanel.Background>
-            <hc:ColorPicker
-                            Name="ColorPicker" 
-                            Canceled="ColorPicker_Canceled" 
-                            SelectedColorChanged="ColorPicker_SelectedColorChanged"/>
+
+            <hc:ColorPicker Name="MyColorPicker" 
+                            ToggleButton.Checked="MyColorPicker_Checked"
+                            Canceled="MyColorPicker_Canceled"
+                            Confirmed="MyColorPicker_Confirmed"
+                            SelectedColorChanged="MyColorPicker_SelectedColorChanged"/>
+
         </StackPanel>
     </Grid>
-        
+
 </UserControl>

+ 42 - 6
Control/UserControls/Config/ThemeControl.xaml.cs

@@ -6,13 +6,17 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
 using System.Windows.Data;
 using System.Windows.Documents;
 using System.Windows.Input;
+using System.Windows.Interop;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
@@ -27,6 +31,8 @@ namespace GeekDesk.Control.UserControls.Config
     {
 
         private static AppConfig appConfig = MainWindow.appData.AppConfig;
+
+        private System.Windows.Controls.Primitives.ToggleButton toggleButton = null;
         public ThemeControl()
         {
             InitializeComponent();
@@ -39,7 +45,7 @@ namespace GeekDesk.Control.UserControls.Config
         /// <param name="e"></param>
         private void BGButton_Click(object sender, RoutedEventArgs e)
         {
-           
+
             try
             {
                 OpenFileDialog ofd = new OpenFileDialog
@@ -84,16 +90,24 @@ namespace GeekDesk.Control.UserControls.Config
             ColorPanel.Visibility = Visibility.Visible;
         }
 
-        private void ColorPicker_Canceled(object sender, EventArgs e)
+        /// <summary>
+        /// 取消按钮事件
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void MyColorPicker_Canceled(object sender, EventArgs e)
         {
-            ColorPanel.Visibility = Visibility.Collapsed;
+            MyColorPickerClose(sender);
+        }
+        private void MyColorPicker_Confirmed(object sender, HandyControl.Data.FunctionEventArgs<Color> e)
+        {
+            MyColorPickerClose(sender);
         }
 
-        private void ColorPicker_SelectedColorChanged(object sender, HandyControl.Data.FunctionEventArgs<Color> e)
+        private void MyColorPicker_SelectedColorChanged(object sender, HandyControl.Data.FunctionEventArgs<Color> e)
         {
-            SolidColorBrush scb =  ColorPicker.SelectedBrush;
+            SolidColorBrush scb = MyColorPicker.SelectedBrush;
             appConfig.TextColor = scb.ToString();
-            ColorPanel.Visibility = Visibility.Collapsed;
         }
 
         /// <summary>
@@ -143,5 +157,27 @@ namespace GeekDesk.Control.UserControls.Config
                 }
             }
         }
+
+        private void MyColorPicker_Checked(object sender, RoutedEventArgs e)
+        {
+            toggleButton = e.OriginalSource as System.Windows.Controls.Primitives.ToggleButton;
+        }
+
+
+        private void MyColorPickerClose(object sender)
+        {
+            if (toggleButton != null && toggleButton.IsChecked == true)
+            {
+                HandyControl.Controls.ColorPicker cp = sender as HandyControl.Controls.ColorPicker;
+                const BindingFlags InstanceBindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
+                Type type = cp.GetType();
+                toggleButton.IsChecked = false;
+                MethodInfo mi = type.GetMethod("ToggleButtonDropper_Click", InstanceBindFlags);
+                mi.Invoke(cp, new object[] { null, null });
+            }
+            ColorPanel.Visibility = Visibility.Collapsed;
+        }
+
+
     }
 }