Example #1
0
 public static Color ToWpfColor(this ColorX colorX) => Color.FromArgb((byte)(int)Math.Round(colorX.Alpha), (byte)(int)Math.Round(colorX.Red), (byte)(int)Math.Round(colorX.Green), (byte)(int)Math.Round(colorX.Blue));
Example #2
0
        //

        public MainWindow()
        {
            InitializeComponent();

            //

            _OpenFileDialog        = new OpenFileDialog();
            _OpenFileDialog.Filter = "OTD 文件|*.otd";

            _SaveFileDialog        = new SaveFileDialog();
            _SaveFileDialog.Filter = "OTD 文件|*.otd";

            //

            Common.IsEditModeChanged     += _IsEditModeChanged;
            Common.CurrentTaxonChanged   += _CurrentTaxonChanged;
            Common.CurrentTabPageChanged += _CurrentTabPageChanged;

            bool backgroundTaskIsRunning = false;

            AsyncMethod.Start = () =>
            {
                if (backgroundTaskIsRunning)
                {
#if DEBUG
                    throw new InvalidOperationException();
#else
                    MessageBox.Show("无效的操作。", Entrance.AppName, MessageBoxButton.OK);
                    Environment.Exit(-1);
#endif
                }

                grid_WaitingForBackgroundTaskPrompt.Visibility = Visibility.Visible;
                backgroundTaskIsRunning = true;
            };
            AsyncMethod.Finish = () =>
            {
                grid_WaitingForBackgroundTaskPrompt.Visibility = Visibility.Collapsed;
                backgroundTaskIsRunning = false;
            };

            view_File.OpenAsync            = _OpenAsync;
            view_File.SaveAsync            = _SaveAsync;
            view_File.SaveAsAsync          = _SaveAsAsync;
            view_File.TrySaveAndCloseAsync = _TrySaveAndCloseAsync;

            //

            this.Loaded += (s, e) =>
            {
                Entrance.New();

                Common.CurrentTaxon = Entrance.Root;
                Common.IsEditMode   = false;
                _IsEditModeChanged(null, Common.IsEditMode);
                Common.CurrentTabPage = Common.TabPage.File;
            };

            this.Closing += (s, e) =>
            {
                if (backgroundTaskIsRunning || !_TrySaveAndClose())
                {
                    e.Cancel = true;
                }
            };

            button_File.Click       += (s, e) => Common.CurrentTabPage = Common.TabPage.File;
            button_Evo.Click        += (s, e) => Common.CurrentTabPage = Common.TabPage.Evo;
            button_Search.Click     += (s, e) => Common.CurrentTabPage = Common.TabPage.Search;
            button_Statistics.Click += (s, e) => Common.CurrentTabPage = Common.TabPage.Statistics;
            button_Validation.Click += (s, e) => Common.CurrentTabPage = Common.TabPage.Validation;
            button_About.Click      += (s, e) => Common.CurrentTabPage = Common.TabPage.About;

            RoutedEventHandler switchThemeMode = (s, e) => Theme.IsDarkTheme = !Theme.IsDarkTheme;
            button_LightTheme.Click += switchThemeMode;
            button_DarkTheme.Click  += switchThemeMode;

            Theme.IsDarkThemeChanged += (s, e) =>
            {
                button_LightTheme.Visibility = Theme.IsDarkTheme ? Visibility.Visible : Visibility.Collapsed;
                button_DarkTheme.Visibility  = !Theme.IsDarkTheme ? Visibility.Visible : Visibility.Collapsed;
            };

            //

            Random random = new Random(Environment.TickCount);
            Theme.ThemeColor  = ColorX.FromHSL(random.Next(360), random.Next(20, 60), 50);
            Theme.IsDarkTheme = false;
        }
Example #3
0
 public static SolidColorBrush GetSolidColorBrush(ColorX color) => GetSolidColorBrush(color.ToWpfColor());
Example #4
0
        private static bool _IsDarkTheme  = false;                       // 是否为暗色主题。

        private static void _UpdateColor()
        {
            ResourceDictionary resourceDictionary = Application.Current.Resources;

            if (_IsDarkTheme)
            {
                // ButtonStyle.xaml

                resourceDictionary["Button.Static.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 10));
                resourceDictionary["Button.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["Button.Static.Foreground"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));

                resourceDictionary["Button.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["Button.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["Button.MouseOver.Foreground"]  = Brushes.Black;

                resourceDictionary["Button.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["Button.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["Button.Pressed.Foreground"]  = Brushes.Black;

                resourceDictionary["Button.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["Button.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["Button.Disabled.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 60));

                resourceDictionary["TabPageButton.Static.Background"] = Brushes.Transparent;
                resourceDictionary["TabPageButton.Static.Foreground"] = Brushes.Black;

                resourceDictionary["TabPageButton.MouseOver.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));
                resourceDictionary["TabPageButton.MouseOver.Foreground"] = Brushes.Black;

                resourceDictionary["TabPageButton.Pressed.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["TabPageButton.Pressed.Foreground"] = Brushes.Black;

                resourceDictionary["TabPageButton.Disabled.Background"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 5));
                resourceDictionary["TabPageButton.Disabled.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));

                resourceDictionary["TransparentButton.Static.Foreground"]    = Brushes.Gray;
                resourceDictionary["TransparentButton.MouseOver.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["TransparentButton.Pressed.Foreground"]   = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["TransparentButton.Disabled.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 50, 50));

                // CheckBoxStyle.xaml

                resourceDictionary["CheckBox.Static.Background"]  = Brushes.Black;
                resourceDictionary["CheckBox.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["CheckBox.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));
                resourceDictionary["CheckBox.Static.Glyph"]       = Brushes.Black;

                resourceDictionary["CheckBox.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["CheckBox.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["CheckBox.MouseOver.Glyph"]       = Brushes.Black;

                resourceDictionary["CheckBox.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["CheckBox.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["CheckBox.Pressed.Glyph"]       = Brushes.Black;

                resourceDictionary["CheckBox.Checked.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["CheckBox.Checked.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["CheckBox.Checked.Glyph"]       = Brushes.Black;

                resourceDictionary["CheckBox.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["CheckBox.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["CheckBox.Disabled.Glyph"]       = Brushes.Gray;

                // ContextMenuStyle.xaml

                resourceDictionary["ContextMenu.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 10));
                resourceDictionary["ContextMenu.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));

                resourceDictionary["Separator.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));

                resourceDictionary["MenuItem.Static.Background"] = Brushes.Transparent;
                resourceDictionary["MenuItem.Static.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));

                resourceDictionary["MenuItem.Highlighted.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["MenuItem.Highlighted.Foreground"] = Brushes.Black;

                resourceDictionary["MenuItem.Disabled.Background"] = Brushes.Transparent;
                resourceDictionary["MenuItem.Disabled.Foreground"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 60));

                // LabelStyle.xaml

                resourceDictionary["Label.Foreground"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));

                resourceDictionary["TitleLabel.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 10));
                resourceDictionary["TitleLabel.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));
                resourceDictionary["TitleLabel.Foreground"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));

                // RadioButtonStyle.xaml

                resourceDictionary["RadioButton.Static.Background"]  = Brushes.Black;
                resourceDictionary["RadioButton.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["RadioButton.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));
                resourceDictionary["RadioButton.Static.Glyph"]       = Brushes.Black;

                resourceDictionary["RadioButton.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["RadioButton.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["RadioButton.MouseOver.Glyph"]       = Brushes.Black;

                resourceDictionary["RadioButton.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["RadioButton.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["RadioButton.Pressed.Glyph"]       = Brushes.Black;

                resourceDictionary["RadioButton.Checked.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["RadioButton.Checked.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["RadioButton.Checked.Glyph"]       = Brushes.Black;

                resourceDictionary["RadioButton.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["RadioButton.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["RadioButton.Disabled.Glyph"]       = Brushes.Gray;

                // ScrollBarStyle.xaml

                resourceDictionary["ScrollBar.Static.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(15));
                resourceDictionary["ScrollBar.Static.Glyph"]      = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["ScrollBar.Static.Thumb"]      = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));

                resourceDictionary["ScrollBar.MouseOver.Glyph"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["ScrollBar.MouseOver.Thumb"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));

                resourceDictionary["ScrollBar.Pressed.Glyph"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["ScrollBar.Pressed.Thumb"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));

                resourceDictionary["ScrollBar.Disabled.Thumb"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));

                // TextBoxStyle.xaml

                resourceDictionary["TextBox.Static.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 0, 50));
                resourceDictionary["TextBox.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 20));
                resourceDictionary["TextBox.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));

                resourceDictionary["TextBox.MouseOver.Background"]            = Brushes.Black;
                resourceDictionary["TextBox.MouseOver.BorderBrush"]           = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));
                resourceDictionary["TextBox.MouseOver.BorderBrush.Underline"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));
                resourceDictionary["TextBox.MouseOver.Foreground"]            = Brushes.White;

                resourceDictionary["TextBox.Focused.Background"]            = Brushes.Black;
                resourceDictionary["TextBox.Focused.BorderBrush"]           = GetSolidColorBrush(ColorX.FromHSL(0, 0, 40));
                resourceDictionary["TextBox.Focused.BorderBrush.Underline"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["TextBox.Focused.Foreground"]            = Brushes.White;

                // Misc.xaml

                resourceDictionary["TabPage.Header.Background"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 6));
                resourceDictionary["TabPage.Body.Background"]   = GetSolidColorBrush(ColorX.FromHSL(0, 0, 4));
                resourceDictionary["TabPage.Side.Background"]   = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));

                resourceDictionary["Tree.Background"]      = GetSolidColorBrush(ColorX.FromHSL(0, 0, 2));
                resourceDictionary["TreeNode.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));

                resourceDictionary["WarningMessage.Background"]  = GetSolidColorBrush(ColorX.FromHSL(5, 80, 10));
                resourceDictionary["WarningMessage.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(5, 80, 50));
                resourceDictionary["WarningMessage.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(5, 80, 70));
            }
            else
            {
                // ButtonStyle.xaml

                resourceDictionary["Button.Static.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 90));
                resourceDictionary["Button.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["Button.Static.Foreground"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));

                resourceDictionary["Button.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["Button.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["Button.MouseOver.Foreground"]  = Brushes.White;

                resourceDictionary["Button.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["Button.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["Button.Pressed.Foreground"]  = Brushes.White;

                resourceDictionary["Button.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["Button.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["Button.Disabled.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 40));

                resourceDictionary["TabPageButton.Static.Background"] = Brushes.Transparent;
                resourceDictionary["TabPageButton.Static.Foreground"] = Brushes.White;

                resourceDictionary["TabPageButton.MouseOver.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["TabPageButton.MouseOver.Foreground"] = Brushes.White;

                resourceDictionary["TabPageButton.Pressed.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));
                resourceDictionary["TabPageButton.Pressed.Foreground"] = Brushes.White;

                resourceDictionary["TabPageButton.Disabled.Background"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 95));
                resourceDictionary["TabPageButton.Disabled.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));

                resourceDictionary["TransparentButton.Static.Foreground"]    = Brushes.Gray;
                resourceDictionary["TransparentButton.MouseOver.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["TransparentButton.Pressed.Foreground"]   = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["TransparentButton.Disabled.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 50, 50));

                // CheckBoxStyle.xaml

                resourceDictionary["CheckBox.Static.Background"]  = Brushes.White;
                resourceDictionary["CheckBox.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["CheckBox.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));
                resourceDictionary["CheckBox.Static.Glyph"]       = Brushes.White;

                resourceDictionary["CheckBox.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["CheckBox.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["CheckBox.MouseOver.Glyph"]       = Brushes.White;

                resourceDictionary["CheckBox.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["CheckBox.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["CheckBox.Pressed.Glyph"]       = Brushes.White;

                resourceDictionary["CheckBox.Checked.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["CheckBox.Checked.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["CheckBox.Checked.Glyph"]       = Brushes.White;

                resourceDictionary["CheckBox.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["CheckBox.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["CheckBox.Disabled.Glyph"]       = Brushes.Gray;

                // ContextMenuStyle.xaml

                resourceDictionary["ContextMenu.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 90));
                resourceDictionary["ContextMenu.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));

                resourceDictionary["Separator.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));

                resourceDictionary["MenuItem.Static.Background"] = Brushes.Transparent;
                resourceDictionary["MenuItem.Static.Foreground"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));

                resourceDictionary["MenuItem.Highlighted.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["MenuItem.Highlighted.Foreground"] = Brushes.White;

                resourceDictionary["MenuItem.Disabled.Background"] = Brushes.Transparent;
                resourceDictionary["MenuItem.Disabled.Foreground"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 40));

                // LabelStyle.xaml

                resourceDictionary["Label.Foreground"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));

                resourceDictionary["TitleLabel.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 90));
                resourceDictionary["TitleLabel.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));
                resourceDictionary["TitleLabel.Foreground"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(30));

                // RadioButtonStyle.xaml

                resourceDictionary["RadioButton.Static.Background"]  = Brushes.White;
                resourceDictionary["RadioButton.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["RadioButton.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));
                resourceDictionary["RadioButton.Static.Glyph"]       = Brushes.White;

                resourceDictionary["RadioButton.MouseOver.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["RadioButton.MouseOver.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["RadioButton.MouseOver.Glyph"]       = Brushes.White;

                resourceDictionary["RadioButton.Pressed.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["RadioButton.Pressed.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["RadioButton.Pressed.Glyph"]       = Brushes.White;

                resourceDictionary["RadioButton.Checked.Background"]  = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["RadioButton.Checked.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["RadioButton.Checked.Glyph"]       = Brushes.White;

                resourceDictionary["RadioButton.Disabled.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["RadioButton.Disabled.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["RadioButton.Disabled.Glyph"]       = Brushes.Gray;

                // ScrollBarStyle.xaml

                resourceDictionary["ScrollBar.Static.Background"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(85));
                resourceDictionary["ScrollBar.Static.Glyph"]      = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));
                resourceDictionary["ScrollBar.Static.Thumb"]      = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(50));

                resourceDictionary["ScrollBar.MouseOver.Glyph"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["ScrollBar.MouseOver.Thumb"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));

                resourceDictionary["ScrollBar.Pressed.Glyph"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));
                resourceDictionary["ScrollBar.Pressed.Thumb"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));

                resourceDictionary["ScrollBar.Disabled.Glyph"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));
                resourceDictionary["ScrollBar.Disabled.Thumb"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));

                // TextBoxStyle.xaml

                resourceDictionary["TextBox.Static.Background"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 100, 50));
                resourceDictionary["TextBox.Static.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 80));
                resourceDictionary["TextBox.Static.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(0, 0, 30));

                resourceDictionary["TextBox.MouseOver.Background"]            = Brushes.White;
                resourceDictionary["TextBox.MouseOver.BorderBrush"]           = GetSolidColorBrush(ColorX.FromHSL(0, 0, 70));
                resourceDictionary["TextBox.MouseOver.BorderBrush.Underline"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));
                resourceDictionary["TextBox.MouseOver.Foreground"]            = Brushes.Black;

                resourceDictionary["TextBox.Focused.Background"]            = Brushes.White;
                resourceDictionary["TextBox.Focused.BorderBrush"]           = GetSolidColorBrush(ColorX.FromHSL(0, 0, 60));
                resourceDictionary["TextBox.Focused.BorderBrush.Underline"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(60));
                resourceDictionary["TextBox.Focused.Foreground"]            = Brushes.Black;

                // Misc.xaml

                resourceDictionary["TabPage.Header.Background"] = GetSolidColorBrush(ColorX.FromHSL(0, 0, 94));
                resourceDictionary["TabPage.Body.Background"]   = GetSolidColorBrush(ColorX.FromHSL(0, 0, 96));
                resourceDictionary["TabPage.Side.Background"]   = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(40));

                resourceDictionary["Tree.Background"]      = GetSolidColorBrush(ColorX.FromHSL(0, 0, 98));
                resourceDictionary["TreeNode.BorderBrush"] = GetSolidColorBrush(_ThemeColor.AtLightness_HSL(70));

                resourceDictionary["WarningMessage.Background"]  = GetSolidColorBrush(ColorX.FromHSL(5, 80, 90));
                resourceDictionary["WarningMessage.BorderBrush"] = GetSolidColorBrush(ColorX.FromHSL(5, 80, 50));
                resourceDictionary["WarningMessage.Foreground"]  = GetSolidColorBrush(ColorX.FromHSL(5, 80, 30));
            }
        }
Example #5
0
            //

            public _StatisticsResultItem(StatisticsResultOfBasicRank statisticsResult)
            {
                Rank basicRank = statisticsResult.BasicRank;

                _ThemeColor = basicRank.GetThemeColor();

                _Container  = new DockPanel();
                _DetailText = new List <(Border border, TextBlock rank, TextBlock count)>();

                //

                _TitleText = new TextBlock()
                {
                    Text              = basicRank.IsUnranked() ? "未指定" : basicRank.IsClade() ? "未分级演化支" : basicRank.GetChineseName(),
                    Margin            = new Thickness(9, 0, 9, 0),
                    VerticalAlignment = VerticalAlignment.Center
                };

                _TitleBorder = new Border()
                {
                    Child        = _TitleText,
                    CornerRadius = new CornerRadius(3),
                    Margin       = new Thickness(0, 0, 6, 0)
                };

                _Container.Children.Add(_TitleBorder);

                //

                _TotalText = new TextBlock()
                {
                    Text   = $"总计:   {statisticsResult.TaxonCount}",
                    Margin = new Thickness(0, 4, 7, 2),
                    HorizontalAlignment = HorizontalAlignment.Right
                };

                _TotalBorder = new Border()
                {
                    Child           = _TotalText,
                    BorderThickness = new Thickness(0, 0, 0, 2)
                };

                if (basicRank.IsPrimaryOrSecondaryRank())
                {
                    StackPanel detailsStackPanel = new StackPanel();

                    int       detailsCount   = statisticsResult.Details.Count + 1; // 把"总计"放在最后一个
                    Grid      grid           = null;
                    const int maxColumnCount = 3;
                    int       columnCount    = 0;
                    int       columnId       = 0;

                    Thickness detailTextMargin = new Thickness(6, 3, 6, 3);

                    for (int i = 0; i < detailsCount; i++)
                    {
                        if (grid is null)
                        {
                            grid = new Grid()
                            {
                                Margin = new Thickness(0, i > 0 ? 3 : 0, 0, 0)
                            };

                            // 避免"总计"单独放在一行
                            if (detailsCount - i == maxColumnCount + 1)
                            {
                                columnCount = maxColumnCount - 1;
                            }
                            else
                            {
                                columnCount = Math.Min(maxColumnCount, detailsCount - i);
                            }

                            if (columnCount > 1)
                            {
                                grid.ColumnDefinitions.Add(new ColumnDefinition());

                                for (int c = 1; c < columnCount; c++)
                                {
                                    grid.ColumnDefinitions.Add(new ColumnDefinition()
                                    {
                                        Width = new GridLength(3)
                                    });
                                    grid.ColumnDefinitions.Add(new ColumnDefinition());
                                }
                            }
                        }

                        if (i < detailsCount - 1)
                        {
                            StatisticsResultOfRank detail = statisticsResult.Details[i];

                            TextBlock rankText = new TextBlock()
                            {
                                Text   = detail.Rank.GetChineseName(),
                                Margin = detailTextMargin
                            };

                            TextBlock countText = new TextBlock()
                            {
                                Text   = detail.TaxonCount.ToString(),
                                Margin = detailTextMargin,
                                HorizontalAlignment = HorizontalAlignment.Right
                            };

                            if (detail.Rank.IsBasicPrimaryRank())
                            {
                                rankText.FontWeight = countText.FontWeight = FontWeights.Bold;
                            }

                            Grid detailGrid = new Grid();
                            detailGrid.Children.Add(rankText);
                            detailGrid.Children.Add(countText);

                            Border detailBorder = new Border()
                            {
                                Child               = detailGrid,
                                CornerRadius        = new CornerRadius(3),
                                BorderThickness     = new Thickness(1),
                                SnapsToDevicePixels = true
                            };

                            detailBorder.SetValue(Grid.ColumnProperty, 2 * columnId);

                            _DetailText.Add((detailBorder, rankText, countText));

                            grid.Children.Add(detailBorder);
                        }
                        else
                        {
                            _TotalBorder.SetValue(Grid.ColumnProperty, 2 * columnId);

                            grid.Children.Add(_TotalBorder);
                        }

                        columnId++;

                        if (columnId >= columnCount)
                        {
                            detailsStackPanel.Children.Add(grid);

                            grid     = null;
                            columnId = 0;
                        }
                    }

                    _Container.Children.Add(detailsStackPanel);
                }
                else
                {
                    _Container.Children.Add(_TotalBorder);
                }

                _UpdateTheme();
            }