private static void OnProgressValueChange(DependencyObject d, DependencyPropertyChangedEventArgs e) { UserControl_ProgressButton button = d as UserControl_ProgressButton; ProgressType progressType = (ProgressType)e.NewValue; switch (progressType) { case ProgressType.Ini: ButtonProgressAssist.SetValue(button.but, 0); button.packIcon.Kind = button.Kind; ButtonProgressAssist.SetIsIndicatorVisible(button.but, false); break; case ProgressType.Start: ButtonProgressAssist.SetValue(button.but, 0); ButtonProgressAssist.SetIsIndicatorVisible(button.but, true); button.packIcon.Kind = PackIconKind.Sync; new DispatcherTimer(TimeSpan.FromMilliseconds(10), DispatcherPriority.Normal, (s, ee) => { if (ButtonProgressAssist.GetValue(button.but) <= 50) { ButtonProgressAssist.SetValue(button.but, ButtonProgressAssist.GetValue(button.but) + 1); } else { ((DispatcherTimer)s).Stop(); } }, Dispatcher.CurrentDispatcher); break; case ProgressType.Done: new DispatcherTimer(TimeSpan.FromMilliseconds(10), DispatcherPriority.Normal, (s, ee) => { if (ButtonProgressAssist.GetValue(button.but) <= 100) { ButtonProgressAssist.SetValue(button.but, ButtonProgressAssist.GetValue(button.but) + 1); } else { ButtonProgressAssist.SetIsIndicatorVisible(button.but, false); button.packIcon.Kind = PackIconKind.Check; ((DispatcherTimer)s).Stop(); } }, Dispatcher.CurrentDispatcher); break; } }