Prechádzať zdrojové kódy

增加渐变背景切换

liufei 3 rokov pred
rodič
commit
ed0eaee98f

+ 100 - 32
Control/UserControls/Config/ThemeControl.xaml

@@ -4,42 +4,109 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:hc="https://handyorg.github.io/handycontrol"
+             xmlns:cvt="clr-namespace:GeekDesk.Converts"
              mc:Ignorable="d" 
              Background="Transparent"
              d:DesignHeight="500" d:DesignWidth="450">
 
 
+    <UserControl.Resources>
+        <cvt:BGStyleConvert x:Key="BGStyleConvert"/>
+        <cvt:StringAppendConvert x:Key="StringAppendConvert"/>
+    </UserControl.Resources>
     <Grid>
         <Grid  MouseDown="DragMove" Background="Transparent">
             <StackPanel Margin="20" >
-                <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
-                    <TextBlock Text="背景图片" VerticalAlignment="Center"/>
+                <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
+                    <TextBlock Text="背景风格" VerticalAlignment="Center"/>
                 </hc:UniformSpacingPanel>
-                <hc:UniformSpacingPanel Spacing="10" Margin="20,0,0,0" Grid.ColumnSpan="4">
-                    <TextBlock Text="图片路径:" VerticalAlignment="Center" Margin="0,5,0,0"/>
-                    <TextBlock Text="{Binding BacImgName}" Width="200" 
-                               Margin="0,5,0,0"
-                           VerticalAlignment="Center"
-                           hc:Poptip.HitMode="None" 
-                           hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
-                           hc:Poptip.Content="{Binding BacImgName}" 
-                           hc:Poptip.Placement="TopLeft"
-                           />
-                    <Button Content="修改" Click="BGButton_Click"/>
-                    <Button Content="默认" Click="DefaultButton_Click"/>
+                <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
+                    <RadioButton Margin="10,0,0,0" Background="{DynamicResource SecondaryRegionBrush}" 
+                         Style="{StaticResource RadioButtonIcon}" Click="BGStyle_Changed" Content="图 片"
+                         IsChecked="{Binding BGStyle, Mode=TwoWay, Converter={StaticResource BGStyleConvert}, ConverterParameter=1}"/>
+                    <RadioButton Margin="10,0,0,0" Background="{DynamicResource SecondaryRegionBrush}"
+                         Style="{StaticResource RadioButtonIcon}" Click="BGStyle_Changed" Content="纯 色" 
+                         IsChecked="{Binding BGStyle, Mode=TwoWay, Converter={StaticResource BGStyleConvert}, ConverterParameter=2}"/>
                 </hc:UniformSpacingPanel>
 
-                <hc:UniformSpacingPanel Spacing="10" Margin="20,0,0,0"  Grid.ColumnSpan="4">
-                    <CheckBox x:Name="IconIsAdmin" Content="毛玻璃效果" IsChecked="{Binding BlurEffect}">
-                        <CheckBox.Background>
-                            <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
-                                <GradientStop Color="#FF9EA3A6"/>
-                            </LinearGradientBrush>
-                        </CheckBox.Background>
-                    </CheckBox>
-                </hc:UniformSpacingPanel>
+                <UniformGrid x:Name="ImgBGConf">
+                    <hc:TransitioningContentControl TransitionMode="Bottom2TopWithFade" 
+                                                    Height="130">
+                        <StackPanel>
+                            <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
+                                <TextBlock Text="图片背景" VerticalAlignment="Center"/>
+                            </hc:UniformSpacingPanel>
+                            <hc:UniformSpacingPanel Spacing="10" Margin="20,15,0,0" Grid.ColumnSpan="4">
+                                <TextBlock Text="图片路径:" VerticalAlignment="Center" Margin="0,5,0,0"/>
+                                <TextBlock Text="{Binding BacImgName}" Width="200" 
+                                           Margin="0,5,0,0"
+                                           VerticalAlignment="Center"
+                                           hc:Poptip.HitMode="None" 
+                                           hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
+                                           hc:Poptip.Content="{Binding BacImgName}" 
+                                           hc:Poptip.Placement="TopLeft"
+                                           />
+                                <Button Content="修改" Click="BGButton_Click"/>
+                                <Button Content="默认" Click="DefaultButton_Click"/>
+                            </hc:UniformSpacingPanel>
+
+                            <hc:UniformSpacingPanel Spacing="10" Margin="20,10,0,0"  Grid.ColumnSpan="4">
+                                <CheckBox x:Name="IconIsAdmin" Content="毛玻璃效果" Click="BGStyle_Changed" IsChecked="{Binding BlurEffect}">
+                                    <CheckBox.Background>
+                                        <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
+                                            <GradientStop Color="#FF9EA3A6"/>
+                                        </LinearGradientBrush>
+                                    </CheckBox.Background>
+                                </CheckBox>
+                            </hc:UniformSpacingPanel>
+                        </StackPanel>
+                    </hc:TransitioningContentControl>
+
+                </UniformGrid>
 
-                <hc:UniformSpacingPanel Spacing="10" Margin="20,5,0,0"  Grid.ColumnSpan="4">
+                <UniformGrid x:Name="GradientBGConf">
+                    <hc:TransitioningContentControl TransitionMode="Bottom2TopWithFade" 
+                                                    Height="130">
+                        <StackPanel>
+                            <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
+                                <TextBlock Text="纯色背景" VerticalAlignment="Center"/>
+                            </hc:UniformSpacingPanel>
+                            <hc:UniformSpacingPanel Spacing="10" Margin="20,0,0,0" Grid.ColumnSpan="4">
+                                <TextBlock Text="色彩1:" VerticalAlignment="Center" Margin="0,5,0,0"/>
+                                <TextBlock Text="{Binding GradientBGParam.Color1, NotifyOnTargetUpdated=True}"
+                                           TargetUpdated="Color_TargetUpdated"
+                                           Width="65" 
+                                           Margin="0,5,0,0"
+                                           VerticalAlignment="Center"
+                                           />
+                                <Button Content="设置" Tag="Color1" Click="ColorButton_Click"/>
+                            </hc:UniformSpacingPanel>
+                            <hc:UniformSpacingPanel Spacing="10" Margin="20,5,0,0" Grid.ColumnSpan="4">
+                                <TextBlock Text="色彩2:" VerticalAlignment="Center" Margin="0,5,0,0"/>
+                                <TextBlock Text="{Binding GradientBGParam.Color2, NotifyOnTargetUpdated=True}" 
+                                           TargetUpdated="Color_TargetUpdated"
+                                           Width="65" 
+                                           Margin="0,5,0,0"
+                                           VerticalAlignment="Center"
+                                           />
+                                <Button Content="设置" Tag="Color2" Click="ColorButton_Click"/>
+                            </hc:UniformSpacingPanel>
+
+                            <Button Content="系统预设"
+                                    Margin="0,5,0,0"
+                                    hc:Poptip.HitMode="None" 
+                                    hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
+                                    hc:Poptip.Content="{Binding GradientBGParam.Name, Converter={StaticResource StringAppendConvert}, ConverterParameter=当前设置: \{\}}" 
+                                    hc:Poptip.Placement="Top"
+                                    />
+                        </StackPanel>
+                    </hc:TransitioningContentControl>
+                </UniformGrid>
+
+
+                <hc:Divider LineStrokeDashArray="3,3" Margin="0,0,0,0" Height="20" LineStroke="Black" Grid.ColumnSpan="1"/>
+
+                <hc:UniformSpacingPanel Spacing="10" Margin="5,-10,0,0"  Grid.ColumnSpan="4">
                     <CheckBox x:Name="BarIcon" Content="显示托盘图标" IsChecked="{Binding ShowBarIcon}">
                         <CheckBox.Background>
                             <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
@@ -49,11 +116,10 @@
                     </CheckBox>
                 </hc:UniformSpacingPanel>
 
-                <hc:Divider LineStrokeDashArray="3,3" LineStroke="Black" Grid.ColumnSpan="4"/>
 
-                <StackPanel>
+                <StackPanel Margin="0,15,0,0">
                     <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
-                        <TextBlock Text="托盘不透明度" VerticalAlignment="Center"/>
+                        <TextBlock Text="卡片不透明度" VerticalAlignment="Center"/>
                     </hc:UniformSpacingPanel>
                     <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
                         <hc:PreviewSlider Value="{Binding CardOpacity}"
@@ -66,15 +132,17 @@
                         </hc:PreviewSlider>
                     </hc:UniformSpacingPanel>
 
+                   
 
                     <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
                         <TextBlock Text="背景图片不透明度" VerticalAlignment="Center"/>
                     </hc:UniformSpacingPanel>
                     <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
                         <hc:PreviewSlider Value="{Binding BgOpacity}"
-                                  Maximum="100"
-                                  Width="350"
-                                  >
+                                          ValueChanged="BGOpacity_ValueChanged"
+                                          Maximum="100"
+                                          Width="350"
+                                          > 
                             <hc:PreviewSlider.PreviewContent>
                                 <Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
                             </hc:PreviewSlider.PreviewContent>
@@ -131,8 +199,8 @@
                 <hc:Divider LineStrokeDashArray="3,3" LineStroke="Black" Grid.ColumnSpan="4"/>
                 <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
                     <TextBlock VerticalAlignment="Center" Text="图标字体颜色:" />
-                    <TextBlock VerticalAlignment="Center" Text="{Binding TextColor}" Width="100"/>
-                    <Button Content="选择" Margin="0,-10,0,0"  Click="ColorButton_Click"/>
+                    <TextBlock VerticalAlignment="Center" Text="{Binding TextColor}" Foreground="{Binding TextColor}" Width="100"/>
+                    <Button Content="选择" Margin="0,-10,0,0" Tag="Text"  Click="ColorButton_Click"/>
                 </hc:UniformSpacingPanel>
             </StackPanel>
         </Grid>

+ 66 - 4
Control/UserControls/Config/ThemeControl.xaml.cs

@@ -18,24 +18,45 @@ using System.Windows.Documents;
 using System.Windows.Input;
 using System.Windows.Interop;
 using System.Windows.Media;
+using System.Windows.Media.Effects;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using System.Windows.Threading;
 
 namespace GeekDesk.Control.UserControls.Config
 {
+
+    enum ColorType
+    {
+        COLOR_1 = 1,
+        COLOR_2 = 2,
+        TEXT_COLOR = 3
+    }
+
     /// <summary>
     /// MotionControl.xaml 的交互逻辑
     /// </summary>
     public partial class ThemeControl : System.Windows.Controls.UserControl
     {
-
+        private static ColorType colorType;
         private static AppConfig appConfig = MainWindow.appData.AppConfig;
 
         private System.Windows.Controls.Primitives.ToggleButton toggleButton = null;
         public ThemeControl()
         {
+            
             InitializeComponent();
+            if (appConfig.BGStyle != BGStyle.GradientBac)
+            {
+                GradientBGConf.Visibility = Visibility.Collapsed;
+                ImgBGConf.Visibility = Visibility.Visible;
+            }
+            else
+            {
+                ImgBGConf.Visibility = Visibility.Collapsed;
+                GradientBGConf.Visibility = Visibility.Visible;
+            }
         }
 
         /// <summary>
@@ -64,7 +85,7 @@ namespace GeekDesk.Control.UserControls.Config
                 LogUtil.WriteErrorLog(ex, "修改背景失败,已重置为默认背景!");
                 HandyControl.Controls.Growl.WarningGlobal("修改背景失败,已重置为默认背景!");
             }
-
+            BGSettingUtil.BGSetting();
         }
 
 
@@ -81,12 +102,22 @@ namespace GeekDesk.Control.UserControls.Config
                 LogUtil.WriteErrorLog(ex, "修改背景失败2,已重置为默认背景!");
                 HandyControl.Controls.Growl.WarningGlobal("修改背景失败,已重置为默认背景!");
             }
-
+            BGSettingUtil.BGSetting();
         }
 
 
         private void ColorButton_Click(object sender, RoutedEventArgs e)
         {
+            string tag = (sender as Button).Tag.ToString();
+            switch (tag)
+            {
+                case "Color1":
+                    colorType = ColorType.COLOR_1;break;
+                case "Color2":
+                    colorType = ColorType.COLOR_2;break;
+                default:
+                    colorType = ColorType.TEXT_COLOR;break;
+            }
             ColorPanel.Visibility = Visibility.Visible;
         }
 
@@ -107,7 +138,16 @@ namespace GeekDesk.Control.UserControls.Config
         private void MyColorPicker_SelectedColorChanged(object sender, HandyControl.Data.FunctionEventArgs<Color> e)
         {
             SolidColorBrush scb = MyColorPicker.SelectedBrush;
-            appConfig.TextColor = scb.ToString();
+
+            switch (colorType)
+            {
+                case ColorType.COLOR_1:
+                    appConfig.GradientBGParam.Color1 = scb.ToString();break;
+                case ColorType.COLOR_2:
+                    appConfig.GradientBGParam.Color2 = scb.ToString(); break;
+                default:
+                    appConfig.TextColor = scb.ToString();break;
+            }
         }
 
         /// <summary>
@@ -178,6 +218,28 @@ namespace GeekDesk.Control.UserControls.Config
             ColorPanel.Visibility = Visibility.Collapsed;
         }
 
+        public void BGStyle_Changed(object sender, RoutedEventArgs e)
+        {
+            BGSettingUtil.BGSetting();
+            if (appConfig.BGStyle != BGStyle.GradientBac)
+            {
+                GradientBGConf.Visibility = Visibility.Collapsed;
+                ImgBGConf.Visibility = Visibility.Visible;
+            } else
+            {
+                ImgBGConf.Visibility = Visibility.Collapsed;
+                GradientBGConf.Visibility = Visibility.Visible;
+            }
+        }
+
+        private void BGOpacity_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
+        {
+            BGSettingUtil.BGSetting();
+        }
 
+        private void Color_TargetUpdated(object sender, DataTransferEventArgs e)
+        {
+            BGSettingUtil.BGSetting();
+        }
     }
 }

+ 29 - 0
Converts/BGStyleConvert.cs

@@ -0,0 +1,29 @@
+using GeekDesk.Constant;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace GeekDesk.Converts
+{
+    class BGStyleConvert : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            return (BGStyle)value == (BGStyle)int.Parse(parameter.ToString());
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            bool isChecked = (bool)value;
+            if (!isChecked)
+            {
+                return null;
+            }
+            return (BGStyle)int.Parse(parameter.ToString());
+        }
+    }
+}

+ 15 - 18
MainWindow.xaml

@@ -4,6 +4,7 @@
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:uc="clr-namespace:GeekDesk.Control.UserControls.PannelCard"
+        xmlns:cn="clr-namespace:GeekDesk.Constant"
         mc:Ignorable="d"
         xmlns:cvt="clr-namespace:GeekDesk.Converts"
         x:Name="window"
@@ -33,12 +34,22 @@
         <cvt:OpcityConvert x:Key="OpcityConvert"/>
         <cvt:IntToCornerRadius x:Key="IntToCornerRadius"/>
         <cvt:DoubleToGridLength x:Key="DoubleToGridLength"/>
+        <cvt:ArrToBitmapImageConvert x:Key="ArrToBitmapImageConvert"/>
+        <cvt:VisualBrushConvert x:Key="VisualBrushConvert"/>
+
+
+        <Style x:Key="BorderBacStyle" TargetType="Border">
+            
+        </Style>
+
     </Window.Resources>
     <Window.InputBindings>
         <KeyBinding Gesture="Ctrl+F" Key="F"  Command="{StaticResource SearchItem}"/>
     </Window.InputBindings>
     <Window.CommandBindings>
         <CommandBinding Command="{StaticResource SearchItem}" CanExecute="SearchItem"/>
+        <!--<CommandBinding Command="ChangeImgBG" Executed="ChangeImgBG_Executed" CanExecute="ChangeImgBG_CanExecute" />-->
+
     </Window.CommandBindings>
 
     <Window.Effect>
@@ -48,29 +59,15 @@
     <Border Margin="20" CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=TwoWay, Converter={StaticResource IntToCornerRadius}}"  BorderThickness="0"
             Background="AliceBlue"
             Opacity="{Binding AppConfig.PannelOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}"
-            VirtualizingPanel.VirtualizationMode="Recycling"  VirtualizingPanel.IsVirtualizing="True"  VirtualizingPanel.IsContainerVirtualizable="True"
             hc:Dialog.Token="IconInfoDialog"
             Focusable="True"
             >
         <hc:DialogContainer Focusable="True">
 
-            <Border CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=TwoWay, Converter={StaticResource IntToCornerRadius}}"  BorderThickness="0">
-                <!--背景图片-->
-                <Border.Background>
-                    <VisualBrush>
-                        <VisualBrush.Visual>
-                            <Grid ClipToBounds="True">
-                                <Image Source="{Binding AppConfig.BitmapImage}" Margin="-30" Opacity="{Binding AppConfig.BgOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}">
-                                    <Image.Effect>
-                                        <BlurEffect Radius="{Binding AppConfig.BlurValue}"/>
-                                    </Image.Effect>
-                                </Image>
-                            </Grid>
-                        </VisualBrush.Visual>
-                    </VisualBrush>
-                </Border.Background>
-
-
+            <Border x:Name="BGBorder" 
+                    CornerRadius="{Binding AppConfig.PannelCornerRadius, Mode=TwoWay, Converter={StaticResource IntToCornerRadius}}"  
+                    BorderThickness="0"
+                    >
                 <Grid>
                     <Grid.RowDefinitions>
                         <RowDefinition Height="40" MouseMove="DragMove"></RowDefinition>

+ 3 - 1
MainWindow.xaml.cs

@@ -18,6 +18,7 @@ using System.Collections.ObjectModel;
 using NPinyin;
 using GeekDesk.ViewModel.Temp;
 using System.Threading;
+using DraggAnimatedPanelExample;
 
 namespace GeekDesk
 {
@@ -52,6 +53,7 @@ namespace GeekDesk
             }
         }
 
+
         /// <summary>
         /// 显示搜索框
         /// </summary>
@@ -110,7 +112,6 @@ namespace GeekDesk
         /// </summary>
         private void LoadData()
         {
-            GC.KeepAlive(appData); // 持活
             this.DataContext = appData;
             if (appData.MenuList.Count == 0)
             {
@@ -129,6 +130,7 @@ namespace GeekDesk
         /// <param name="e"></param>
         void Window_Loaded(object sender, RoutedEventArgs e)
         {
+            BGSettingUtil.BGSetting();
             if (!appData.AppConfig.StartedShowPanel)
             {
                 if (appData.AppConfig.AppAnimation)

+ 74 - 0
Util/BGSettingUtil.cs

@@ -0,0 +1,74 @@
+using GeekDesk.Constant;
+using GeekDesk.ViewModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Media;
+using System.Windows.Media.Effects;
+
+namespace GeekDesk.Util
+{
+    public class BGSettingUtil
+    {
+        private static readonly AppConfig appConfig = MainWindow.appData.AppConfig;
+        public static void BGSetting()
+        {
+            if (appConfig.BGStyle == BGStyle.ImgBac || appConfig.BGStyle == 0)
+            {
+                Image image = new Image
+                {
+                    Effect = new BlurEffect()
+                    {
+                        Radius = appConfig.BlurValue
+                    },
+                    Margin = new Thickness(-30),
+                    Source = appConfig.BitmapImage,
+                    Opacity = (double)(Math.Round((decimal)(appConfig.BgOpacity / 100.00), 2))
+            };
+
+                
+                //binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
+                //image.SetBinding(Image.OpacityProperty, binding);
+
+                Grid grid = new Grid
+                {
+                    ClipToBounds = true
+                };
+                grid.Children.Add(image);
+
+                VisualBrush vb = new VisualBrush
+                {
+                    Visual = grid
+                };
+                MainWindow.mainWindow.BGBorder.Background = vb;
+            }
+            else
+            {
+                LinearGradientBrush lgb = new LinearGradientBrush();
+
+                GradientStop gs = new GradientStop
+                {
+                    Color = (Color)ColorConverter.ConvertFromString(appConfig.GradientBGParam.Color1),
+                    Offset = 0
+                };
+
+                lgb.GradientStops.Add(gs);
+
+                GradientStop gs2 = new GradientStop
+                {
+                    Color = (Color)ColorConverter.ConvertFromString(appConfig.GradientBGParam.Color2),
+                    Offset = 1
+                };
+                lgb.GradientStops.Add(gs2);
+                MainWindow.mainWindow.BGBorder.Background = lgb;
+            }
+            
+        }
+
+    }
+}