Browse Source

属性面板 - 添加文字批注面板

chenrongqian 2 years ago
parent
commit
e850086d29

+ 56 - 0
PDF Office/CustomControl/ColorDropBox.xaml

@@ -0,0 +1,56 @@
+<UserControl x:Class="PDF_Office.CustomControl.ColorDropBox"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             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:PDF_Office.CustomControl"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800" MinWidth="52" Background="#01000000">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"></ColumnDefinition>
+            <ColumnDefinition Width="auto"  MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" ></ColumnDefinition>
+        </Grid.ColumnDefinitions>
+        <!--正常颜色显示模块-->
+        <Border Width="16" Height="16" HorizontalAlignment="Left" BorderThickness="1" BorderBrush="#33000000" Margin="12,0,0,0"
+                Visibility="{Binding ElementName=NormalColorRectControl,Path=Visibility}">
+            <Rectangle  Name="NormalColorRectControl" Visibility="Collapsed"/>
+        </Border>
+        <!--透明颜色显示模块-->
+        <Border  Width="16" Height="16" HorizontalAlignment="Left" BorderThickness="1" Margin="12,0,0,0"
+                BorderBrush="#33000000" Visibility="{Binding ElementName=TransparentRectControl,Path=Visibility}">
+            <Rectangle  Name="TransparentRectControl" Visibility="Collapsed">
+                <Rectangle.Fill>
+                    <DrawingBrush>
+                        <DrawingBrush.Drawing>
+                            <DrawingGroup>
+                                <GeometryDrawing Brush="White">
+                                    <GeometryDrawing.Pen>
+                                        <Pen Thickness="1" Brush="#E2E3E6"></Pen>
+                                    </GeometryDrawing.Pen>
+                                    <GeometryDrawing.Geometry>
+                                        <RectangleGeometry Rect="0,0,16,16"></RectangleGeometry>
+                                    </GeometryDrawing.Geometry>
+                                </GeometryDrawing>
+                                <GeometryDrawing>
+                                    <GeometryDrawing.Pen>
+                                        <Pen Thickness="2" Brush="#FF3B30"></Pen>
+                                    </GeometryDrawing.Pen>
+                                    <GeometryDrawing.Geometry>
+                                        <LineGeometry StartPoint="16,0" EndPoint="0,16"></LineGeometry>
+                                    </GeometryDrawing.Geometry>
+                                </GeometryDrawing>
+                            </DrawingGroup>
+                        </DrawingBrush.Drawing>
+                    </DrawingBrush>
+                </Rectangle.Fill>
+            </Rectangle>
+        </Border>
+
+        <!--下拉模块-->
+        <Border Grid.Column="1" BorderThickness="0" Background="Transparent" HorizontalAlignment="Right" Padding="4,0,4,0">
+            <Polygon Points="13.8535156 5.85546875 13.1445312 5.14648438 8 10.2910156 2.85546875 5.14648438 2.14648438 5.85546875 8 11.7089844"
+                     Fill="#000000" Width="16" Height="16"/>
+        </Border>
+    </Grid>
+</UserControl>

+ 315 - 0
PDF Office/CustomControl/ColorDropBox.xaml.cs

@@ -0,0 +1,315 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace PDF_Office.CustomControl
+{
+    /// <summary>
+    /// ColorDropBox.xaml 的交互逻辑
+    /// </summary>
+    public partial class ColorDropBox : UserControl, INotifyPropertyChanged
+    {
+        public class AdornerPresenter : Adorner
+        {
+            private VisualCollection VisualChildren;
+            private ContentPresenter Content;
+            public AdornerPresenter(UIElement adornedElement) : base(adornedElement)
+            {
+                VisualChildren = new VisualCollection(this);
+                Content = new ContentPresenter();
+                VisualChildren.Add(Content);
+            }
+
+            protected override Size MeasureOverride(Size constraint)
+            {
+                Content.Measure(constraint);
+                return Content.DesiredSize;
+            }
+
+            protected override Size ArrangeOverride(Size finalSize)
+            {
+                Content.Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height));
+                return Content.RenderSize;
+            }
+
+            protected override Visual GetVisualChild(int index)
+            {
+                return VisualChildren[index];
+            }
+
+            protected override int VisualChildrenCount
+            {
+                get
+                {
+                    return VisualChildren.Count;
+                }
+            }
+
+            public object VisualContent
+            {
+                get
+                {
+                    return Content.Content;
+                }
+                set
+                {
+                    Content.Content = value;
+                }
+            }
+        }
+
+        private AdornerLayer popLayer;
+        private AdornerPresenter layerPresent;
+        private bool layerAdded = false;
+        private Canvas popCanvas;
+        private ColorDropBoxPop colorPop;
+
+        public event EventHandler<Color?> SelectedColorChanged;
+        public event PropertyChangedEventHandler PropertyChanged;
+        protected void OnPropertyChanged([CallerMemberName] string name = null)
+        {
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+        private Color? _selectedColor;
+        public Color? SelectedColor
+        {
+            get
+            {
+                return _selectedColor;
+            }
+            set
+            {
+                if (_selectedColor != value)
+                {
+                    _selectedColor = value;
+                    OnPropertyChanged("SelectedColor");
+                }
+            }
+        }
+        public bool HasTransparentColor
+        {
+            get
+            {
+                if (colorPop != null)
+                {
+                    return colorPop.TransparentPanel.Visibility == Visibility.Visible;
+                }
+                return false;
+            }
+            set
+            {
+                if (colorPop != null)
+                {
+                    colorPop.SetTransparentPanelVisible(value);
+                }
+            }
+        }
+        public ColorDropBox()
+        {
+            InitializeComponent();
+            Loaded += ColorDropBox_Loaded;
+            Unloaded += ColorDropBox_Unloaded;
+            MouseDown += ColorDropBox_MouseDown;
+            colorPop = new ColorDropBoxPop();
+        }
+
+        private void ColorDropBox_Unloaded(object sender, RoutedEventArgs e)
+        {
+            if (layerAdded)
+            {
+                RemoveFromLayer();
+                return;
+            }
+        }
+
+        private void ColorDropBox_MouseDown(object sender, MouseButtonEventArgs e)
+        {
+            e.Handled = true;
+            if (layerAdded)
+            {
+                RemoveFromLayer();
+                return;
+            }
+            AddToLayer();
+        }
+
+        private void AddToLayer()
+        {
+            Window parentWnd = Window.GetWindow(this);
+            popLayer = AdornerLayer.GetAdornerLayer(parentWnd.Content as UIElement);
+            if (popLayer != null && colorPop != null &&!layerAdded)
+            {
+                if (layerPresent == null)
+                {
+                    layerPresent = new AdornerPresenter(popLayer);
+                }
+                popLayer.Add(layerPresent);
+                if (popCanvas == null)
+                {
+                    popCanvas = new Canvas();
+                    popCanvas.Children.Add(colorPop);
+                    layerPresent.VisualContent = popCanvas;
+
+                    colorPop.ColorSelected += ColorPop_ColorSelected;
+                }
+                Point offset = GetOffsetToWindow();
+                colorPop.Visibility = Visibility.Visible;
+                colorPop.Measure(new Size(parentWnd.ActualWidth, parentWnd.ActualHeight));
+                colorPop.SetValue(Canvas.TopProperty, offset.Y + this.ActualHeight + 2);
+
+                if (offset.X + colorPop.DesiredSize.Width + SystemParameters.ResizeFrameVerticalBorderWidth * 2 > parentWnd.ActualWidth)
+                {
+                    colorPop.SetValue(Canvas.LeftProperty, parentWnd.ActualWidth - colorPop.DesiredSize.Width - 5 - SystemParameters.ResizeFrameVerticalBorderWidth * 2);
+                }
+                else
+                {
+                    colorPop.SetValue(Canvas.LeftProperty, offset.X);
+                }
+                layerAdded = true;
+            }
+        }
+        private void RemoveFromLayer()
+        {
+            if (popLayer != null && layerPresent != null && layerAdded)
+            {
+                popLayer.Remove(layerPresent);
+                layerAdded = false;
+            }
+        }
+
+        private void ColorDropBox_Loaded(object sender, RoutedEventArgs e)
+        {
+            if (popLayer == null)
+            {
+                Window parentWnd = Window.GetWindow(this);
+                if (parentWnd != null && parentWnd.Content is UIElement && colorPop != null)
+                {
+                    parentWnd.AddHandler(MouseDownEvent, new MouseButtonEventHandler((eventsender, param) =>
+                    {
+                        if (layerAdded)
+                        {
+                            try
+                            {
+                                Window checkWindow = Window.GetWindow(this);
+                                Point clickPoint = param.GetPosition(checkWindow);
+                                Point leftTop = TransformToVisual(checkWindow).Transform(new Point(0, 0));
+                                Point rightBottom = TransformToVisual(checkWindow).Transform(new Point(ActualWidth, ActualHeight));
+                                Point popLeftTop = new Point(Canvas.GetLeft(colorPop), Canvas.GetTop(colorPop));
+                                Point popRightBottom = new Point(colorPop.ActualWidth, colorPop.ActualHeight);
+                                Rect dropboxRect = new Rect(leftTop.X, leftTop.Y, rightBottom.X - leftTop.X, rightBottom.Y - leftTop.Y);
+                                Rect popboxRect = new Rect(popLeftTop.X, popLeftTop.Y, popRightBottom.X, popRightBottom.Y);
+                                if (dropboxRect.Contains(clickPoint) || popboxRect.Contains(clickPoint))
+                                {
+                                    return;
+                                }
+                                RemoveFromLayer();
+                            }
+                            catch(Exception ex)
+                            {
+
+                            }
+                           
+                        }
+                    }), true);
+                }
+            }
+        }
+
+        private void ColorPop_ColorSelected(object sender, Color e)
+        {
+            if (SelectedColor != e)
+            {
+                NormalColorRectControl.Visibility = Visibility.Collapsed;
+                TransparentRectControl.Visibility = Visibility.Collapsed;
+                if (e != Colors.Transparent)
+                {
+                    NormalColorRectControl.Visibility = Visibility.Visible;
+                    NormalColorRectControl.Fill = new SolidColorBrush(e);
+                }
+                else
+                {
+                    TransparentRectControl.Visibility = Visibility.Visible;
+                }
+                SelectedColor = e;
+                SelectedColorChanged?.Invoke(this, SelectedColor);
+            }
+            RemoveFromLayer();
+        }
+
+        public Point GetOffsetToWindow()
+        {
+            Window parentWnd = Window.GetWindow(this);
+            return TransformToAncestor(parentWnd).Transform(new Point(0, 0));
+        }
+
+        public void SetThemeColors(List<Color> themeColorList)
+        {
+            if (colorPop != null)
+            {
+                colorPop.ThemeColors.Clear();
+                foreach (Color themeColor in themeColorList)
+                {
+                    colorPop.ThemeColors.Add(themeColor);
+                }
+            }
+        }
+        public List<Color> GetThemeColors()
+        {
+            if (colorPop != null)
+            {
+                return colorPop.ThemeColors.ToList();
+            }
+            return new List<Color>();
+        }
+        public List<Color> GetRecentlyColors()
+        {
+            if (colorPop != null)
+            {
+                return colorPop.RecentlyColors.ToList();
+            }
+            return new List<Color>();
+        }
+        public void SetSelectedColor(Color setColor)
+        {
+            if (SelectedColor != setColor)
+            {
+                NormalColorRectControl.Visibility = Visibility.Collapsed;
+                TransparentRectControl.Visibility = Visibility.Collapsed;
+                if (setColor != Colors.Transparent)
+                {
+                    NormalColorRectControl.Visibility = Visibility.Visible;
+                    NormalColorRectControl.Fill = new SolidColorBrush(setColor);
+                }
+                else
+                {
+                    TransparentRectControl.Visibility = Visibility.Visible;
+                }
+                SelectedColor = setColor;
+                if (colorPop != null)
+                {
+                    colorPop.AddColorToRecent(setColor);
+                }
+            }
+        }
+
+        public void ClearSelectColor()
+        {
+            _selectedColor = null;
+            NormalColorRectControl.Visibility = Visibility.Collapsed;
+            TransparentRectControl.Visibility = Visibility.Collapsed;
+        }
+    }
+}

+ 114 - 0
PDF Office/CustomControl/ColorDropBoxPop.xaml

@@ -0,0 +1,114 @@
+<UserControl x:Class="PDF_Office.CustomControl.ColorDropBoxPop"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             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:PDF_Office.CustomControl"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800" Width="194" Height="auto">
+    <UserControl.Resources>
+        <!--<local:ColorToBrushConverter x:Key="ColorToBrushConverter"></local:ColorToBrushConverter>-->
+        <Style TargetType="ListViewItem">
+            <Setter Property="Width" Value="15" ></Setter>
+            <Setter Property="Height" Value="15" ></Setter>
+            <Setter Property="Padding" Value="0"></Setter>
+            <Setter Property="BorderThickness" Value="1"></Setter>
+            <Setter Property="BorderBrush" Value="#33000000"></Setter>
+            <Setter Property="Margin" Value="1"></Setter>
+        </Style>
+    </UserControl.Resources>
+    <Grid>
+        <Border Background="White" Name="ContainerBorder" BorderThickness="1">
+            <Border.Effect>
+                <DropShadowEffect Color="#000000" ShadowDepth="0" BlurRadius="24" Opacity="0.22">
+                </DropShadowEffect>
+            </Border.Effect>
+            <Grid>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                    <RowDefinition Height="auto"></RowDefinition>
+                </Grid.RowDefinitions>
+                <TextBlock x:Name="RecentlyColorText" VerticalAlignment="Bottom" LineHeight="20" FontFamily="Segoe UI" FontSize="14" Margin="8,8,0,3">Recently used color</TextBlock>
+                <ListView Grid.Row="1" BorderThickness="0" Name="RecentlyColorList" Margin="9,0,9,0" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
+                    <ListView.ItemsPanel>
+                        <ItemsPanelTemplate>
+                            <WrapPanel Width="{Binding ElementName=ThemeColorList,Path=ActualWidth}">
+                            </WrapPanel>
+                        </ItemsPanelTemplate>
+                    </ListView.ItemsPanel>
+                    <!--<ListView.ItemTemplate>
+                        <DataTemplate>
+                            <Rectangle Width="14" Height="14" Fill="{Binding Converter={StaticResource ColorToBrushConverter}}" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"></Rectangle>
+                        </DataTemplate>
+                    </ListView.ItemTemplate>-->
+                </ListView>
+                <TextBlock x:Name="ThemeColorsText" Grid.Row="2" FontFamily="SegoeUI" FontSize="14" LineHeight="20" Margin="8,5,0,1">Theme colors</TextBlock>
+                <ListView Grid.Row="3" BorderThickness="0" Name="ThemeColorList"  Margin="9,0,9,0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" SelectionMode="Single">
+                    <ListView.ItemsPanel>
+                        <ItemsPanelTemplate>
+                            <WrapPanel Width="{Binding ElementName=ThemeColorList,Path=ActualWidth}">
+                            </WrapPanel>
+                        </ItemsPanelTemplate>
+                    </ListView.ItemsPanel>
+                    <ListView.ItemTemplate>
+                        <DataTemplate>
+                            <Rectangle Width="14" Height="14" Fill="{Binding Converter={StaticResource ColorToBrushConverter}}" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"></Rectangle>
+                        </DataTemplate>
+                    </ListView.ItemTemplate>
+                </ListView>
+                <Separator Grid.Row="4" Width="190" Height="1"  Background="#26000000" HorizontalAlignment="Center" Margin="2,9,2,8"></Separator>
+                <StackPanel Orientation="Horizontal" Grid.Row="5" Name="TransparentPanel" Margin="0 0 0 8" Visibility="Collapsed">
+                    <Rectangle Width="16" Height="16" Margin="8,0,2,0" MouseLeftButtonDown="TransparentColor_MouseLeftButtonDown">
+                        <Rectangle.Fill>
+                            <DrawingBrush>
+                                <DrawingBrush.Drawing>
+                                    <DrawingGroup>
+                                        <GeometryDrawing Brush="White">
+                                            <GeometryDrawing.Pen>
+                                                <Pen Thickness="1" Brush="#E2E3E6"></Pen>
+                                            </GeometryDrawing.Pen>
+                                            <GeometryDrawing.Geometry>
+                                                <RectangleGeometry Rect="0,0,16,16"></RectangleGeometry>
+                                            </GeometryDrawing.Geometry>
+                                        </GeometryDrawing>
+                                        <GeometryDrawing>
+                                            <GeometryDrawing.Pen>
+                                                <Pen Thickness="2" Brush="#FF3B30"></Pen>
+                                            </GeometryDrawing.Pen>
+                                            <GeometryDrawing.Geometry>
+                                                <LineGeometry StartPoint="16,0" EndPoint="0,16"></LineGeometry>
+                                            </GeometryDrawing.Geometry>
+                                        </GeometryDrawing>
+                                    </DrawingGroup>
+                                </DrawingBrush.Drawing>
+                            </DrawingBrush>
+                        </Rectangle.Fill>
+                    </Rectangle>
+                    <TextBlock x:Name="TransparentText" FontFamily="Segoe UI" FontSize="14" VerticalAlignment="Center">Transparent</TextBlock>
+                </StackPanel>
+                <StackPanel Orientation="Horizontal" Grid.Row="6" MouseDown="SystemColorPicker_ClickPop">
+                    <Ellipse Width="16" Height="16" Margin="8,0,2,10"  VerticalAlignment="Center">
+                        <Ellipse.Fill>
+                            <DrawingBrush>
+                                <DrawingBrush.Drawing>
+                                    <ImageDrawing ImageSource="../Resources/PropertyPanel/colorIcon.png">
+                                        <ImageDrawing.Rect>
+                                            <Rect Width="16" Height="16"></Rect>
+                                        </ImageDrawing.Rect>
+                                    </ImageDrawing>
+                                </DrawingBrush.Drawing>
+                            </DrawingBrush>
+                        </Ellipse.Fill>
+                    </Ellipse>
+                    <TextBlock x:Name="OtherColorsText" VerticalAlignment="Center" FontFamily="Segoe UI" FontSize="14" Margin="0 0 0 8">Other Colors</TextBlock>
+                </StackPanel>
+            </Grid>
+        </Border>
+    </Grid>
+</UserControl>

+ 200 - 0
PDF Office/CustomControl/ColorDropBoxPop.xaml.cs

@@ -0,0 +1,200 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using WinForm = System.Windows.Forms;
+
+namespace PDF_Office.CustomControl
+{
+    /// <summary>
+    /// ColorDropBoxPop.xaml 的交互逻辑
+    /// </summary>
+    public class ColorToBrushConverter : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            if (value is Color)
+            {
+                return new SolidColorBrush((Color)value);
+            }
+            return Brushes.Transparent;
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            throw new NotImplementedException();
+        }
+    }
+    /// <summary>
+    /// ColorDropBoxPop.xaml 的交互逻辑
+    /// </summary>
+    public partial class ColorDropBoxPop : UserControl
+    {
+        public event EventHandler<Color> ColorSelected;
+        public ObservableCollection<Color> RecentlyColors { get; private set; }
+        public ObservableCollection<Color> ThemeColors { get; private set; }
+        public ColorDropBoxPop()
+        {
+            InitializeComponent();
+            SetLangText();
+            RecentlyColors = new ObservableCollection<Color>();
+            ThemeColors = new ObservableCollection<Color>();
+            CreateThemeColors();
+            RecentlyColorList.ItemsSource = RecentlyColors;
+            ThemeColorList.ItemsSource = ThemeColors;
+        }
+
+        private void SetLangText()
+        {
+            //RecentlyColorText.Text = App.MainPageLoader.GetString("Themes_RecentlyUsed");
+            //TransparentText.Text = App.MainPageLoader.GetString("Themes_Transparent");
+            //OtherColorsText.Text = App.MainPageLoader.GetString("Themes_More");
+            //ThemeColorsText.Text = App.MainPageLoader.GetString("ProperPanel_Color");
+        }
+
+        public void CreateThemeColors()
+        {
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xFF, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0x00, 0x00, 0x00));
+            ThemeColors.Add(Color.FromRgb(0x25, 0x1C, 0x16));
+            ThemeColors.Add(Color.FromRgb(0xCC, 0x00, 0x00));
+            ThemeColors.Add(Color.FromRgb(0xCC, 0x4E, 0x00));
+            ThemeColors.Add(Color.FromRgb(0x99, 0x70, 0x00));
+            ThemeColors.Add(Color.FromRgb(0x1C, 0x70, 0x17));
+            ThemeColors.Add(Color.FromRgb(0x00, 0x8D, 0x99));
+            ThemeColors.Add(Color.FromRgb(0x00, 0x3F, 0x99));
+            ThemeColors.Add(Color.FromRgb(0x61, 0x00, 0x99));
+
+            ThemeColors.Add(Color.FromRgb(0x88, 0x88, 0x88));
+            ThemeColors.Add(Color.FromRgb(0x1B, 0x1B, 0x1B));
+            ThemeColors.Add(Color.FromRgb(0x4A, 0x37, 0x2C));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x00, 0x00));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x61, 0x00));
+            ThemeColors.Add(Color.FromRgb(0xCC, 0x96, 0x00));
+            ThemeColors.Add(Color.FromRgb(0x27, 0x9D, 0x20));
+            ThemeColors.Add(Color.FromRgb(0x00, 0xBC, 0xCC));
+            ThemeColors.Add(Color.FromRgb(0x00, 0x54, 0xcc));
+            ThemeColors.Add(Color.FromRgb(0x82, 0x00, 0xcc));
+
+            ThemeColors.Add(Color.FromRgb(0xA0, 0xA0, 0xA0));
+            ThemeColors.Add(Color.FromRgb(0x29, 0x29, 0x29));
+            ThemeColors.Add(Color.FromRgb(0x6E, 0x53, 0x42));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x33, 0x33));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x81, 0x33));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xBB, 0x00));
+            ThemeColors.Add(Color.FromRgb(0x32, 0xCA, 0x29));
+            ThemeColors.Add(Color.FromRgb(0x00, 0xEB, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0x00, 0x69, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0xA2, 0x00, 0xFF));
+
+            ThemeColors.Add(Color.FromRgb(0xB8, 0xB8, 0xB8));
+            ThemeColors.Add(Color.FromRgb(0x44, 0x44, 0x44));
+            ThemeColors.Add(Color.FromRgb(0x93, 0x6E, 0x58));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x66, 0x66));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xA0, 0x66));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xC9, 0x33));
+            ThemeColors.Add(Color.FromRgb(0x38, 0xE0, 0x2E));
+            ThemeColors.Add(Color.FromRgb(0x33, 0xEF, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0x33, 0x87, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0xB5, 0x33, 0xFF));
+
+            ThemeColors.Add(Color.FromRgb(0xCF, 0xCF, 0xCF));
+            ThemeColors.Add(Color.FromRgb(0x5F, 0x5F, 0x5F));
+            ThemeColors.Add(Color.FromRgb(0xB8, 0x8A, 0x6E));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0x99, 0x99));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xB0, 0x80));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xD6, 0x66));
+            ThemeColors.Add(Color.FromRgb(0x60, 0xE6, 0x58));
+            ThemeColors.Add(Color.FromRgb(0x66, 0xF3, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0x66, 0xA5, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0xC7, 0x66, 0xFF));
+
+            ThemeColors.Add(Color.FromRgb(0xE7, 0xE7, 0xE7));
+            ThemeColors.Add(Color.FromRgb(0x7A, 0x7A, 0x7A));
+            ThemeColors.Add(Color.FromRgb(0xC6, 0xA1, 0x8B));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xCC, 0xCC));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xC4, 0x9F));
+            ThemeColors.Add(Color.FromRgb(0xFF, 0xE4, 0x99));
+            ThemeColors.Add(Color.FromRgb(0x88, 0xEC, 0x82));
+            ThemeColors.Add(Color.FromRgb(0x99, 0xF7, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0x99, 0xC3, 0xFF));
+            ThemeColors.Add(Color.FromRgb(0xDA, 0x99, 0xFF));
+        }
+
+        private void SystemColorPicker_ClickPop(object sender, MouseButtonEventArgs e)
+        {
+            this.Visibility = Visibility.Collapsed;
+            WinForm.ColorDialog colorPicker = new WinForm.ColorDialog();
+            WinForm.DialogResult result = colorPicker.ShowDialog();
+            if (result == WinForm.DialogResult.OK)
+            {
+
+                Color selectColor = Color.FromArgb(colorPicker.Color.A, colorPicker.Color.R, colorPicker.Color.G, colorPicker.Color.B);
+                AddColorToRecent(selectColor);
+                if (ColorSelected != null)
+                {
+                    ColorSelected?.Invoke(this, selectColor);
+                }
+            }
+        }
+
+        private void TransparentColor_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            if (ColorSelected != null)
+            {
+                ColorSelected?.Invoke(this, Colors.Transparent);
+            }
+            this.Visibility = Visibility.Collapsed;
+        }
+
+        private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            this.Visibility = Visibility.Collapsed;
+            Rectangle clickRectangle = sender as Rectangle;
+            if (clickRectangle != null)
+            {
+                SolidColorBrush fillBrush = clickRectangle.Fill as SolidColorBrush;
+                if (fillBrush != null)
+                {
+                    AddColorToRecent(fillBrush.Color);
+                    if (ColorSelected != null)
+                    {
+                        ColorSelected?.Invoke(this, fillBrush.Color);
+                    }
+                }
+            }
+        }
+
+        public void AddColorToRecent(Color recentColor)
+        {
+            if(recentColor==Colors.Transparent)
+            {
+                return;
+            }
+            if (RecentlyColors.AsEnumerable().Where(x => x == recentColor).Count() == 0)
+            {
+                while (RecentlyColors.Count >= 10)
+                {
+                    RecentlyColors.RemoveAt(0);
+                }
+                RecentlyColors.Add(recentColor);
+            }
+        }
+        public void SetTransparentPanelVisible(bool visible)
+        {
+            TransparentPanel.Visibility = visible ? Visibility.Visible : Visibility.Collapsed;
+        }
+    }
+}

+ 15 - 0
PDF Office/PDF Office.csproj

@@ -187,6 +187,12 @@
     <Compile Include="CustomControl\AlertsMessage.xaml.cs">
       <DependentUpon>AlertsMessage.xaml</DependentUpon>
     </Compile>
+    <Compile Include="CustomControl\ColorDropBox.xaml.cs">
+      <DependentUpon>ColorDropBox.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="CustomControl\ColorDropBoxPop.xaml.cs">
+      <DependentUpon>ColorDropBoxPop.xaml</DependentUpon>
+    </Compile>
     <Compile Include="CustomControl\CustomIconToggleBtn.cs" />
     <Compile Include="CustomControl\DialogContent.cs" />
     <Compile Include="CustomControl\IconAndTextTabItem.cs" />
@@ -444,6 +450,14 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="CustomControl\ColorDropBox.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="CustomControl\ColorDropBoxPop.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="CustomControl\LoadingControl.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
@@ -802,6 +816,7 @@
     <Resource Include="Resources\ToolBarIcon\MyTools\Stamp.png" />
     <Resource Include="Resources\ToolBarIcon\MyTools\Textbox.png" />
     <Resource Include="Resources\ToolBarIcon\MyTools\wavyline2.png" />
+    <Resource Include="Resources\PropertyPanel\colorIcon.png" />
     <Content Include="SystemService\PreviewHandler.dll">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>

BIN
PDF Office/Resources/PropertyPanel/colorIcon.png


+ 2 - 1
PDF Office/Views/PropertyPanel/AnnotPanel/TextAnnotProperty.xaml

@@ -4,9 +4,10 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:PDF_Office.Views.PropertyPanel.AnnotPanel"
+             xmlns:cus="clr-namespace:PDF_Office.CustomControl"
              mc:Ignorable="d" 
              d:DesignHeight="450" d:DesignWidth="800">
     <Grid>
-            
+        
     </Grid>
 </UserControl>