private static void WorkStatusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ProgressInfoControl control = (ProgressInfoControl)d;
            var status = (WorkStatus)e.NewValue;

            manageWorkStatus(status, control);
        }
        private static async void resetSpinnerAndProgressBarToIdleStateDelayed(ProgressInfoControl control, string fromState)
        {
            control.WorkStatus = WorkStatus.Idle;
            control.WorkStatusTextBlock.Text = fromState;
            await Task.Delay(2000);

            control.WorkStatusTextBlock.Text = Constants.IDLE_WORK_STATUS;
            control.WorkStatus = WorkStatus.Idle;
        }
        private static void ProgressChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ProgressInfoControl control = (ProgressInfoControl)d;
            var progressValue           = (int)e.NewValue;

            if (progressValue >= 100)
            {
                control.WorkProgressBar.IsIndeterminate = true;
            }
            else
            {
                control.WorkProgressBar.IsIndeterminate = false;
                control.WorkProgressBar.Value           = progressValue;
            }
        }
        private static void manageWorkStatus(WorkStatus status, ProgressInfoControl control)
        {
            switch (status)
            {
            case WorkStatus.Idle:
            {
                control.WorkStatusTextBlock.Text        = Constants.IDLE_WORK_STATUS;
                control.Spinner.Spin                    = false;
                control.WorkProgressBar.IsIndeterminate = false;
                control.WorkProgressBar.Value           = 0;
                control.WorkProgressBar.Visibility      = Visibility.Collapsed;
            };
                break;

            case WorkStatus.Working:
            {
                control.WorkProgressBar.Visibility = Visibility.Visible;
                control.Spinner.Spin             = true;
                control.WorkStatusTextBlock.Text = Constants.WORKING_WORK_STATUS;
            };
                break;

            case WorkStatus.Canceled:
            {
                resetSpinnerAndProgressBarToIdleStateDelayed(control, Constants.CANCELED_WORK_STATUS);
            };
                break;

            case WorkStatus.Error:
            {
                resetSpinnerAndProgressBarToIdleStateDelayed(control, Constants.ERROR_WORK_STATUS);
            };
                break;

            case WorkStatus.Done:
            {
                resetSpinnerAndProgressBarToIdleStateDelayed(control, Constants.COMPLETED_WORK_STATUS);
            };
                break;
            }
        }