`

忙碌状态下转圈的实现

 
阅读更多

 public class AsyncNotifier

    {

 

        public static void SetAnalysisText(DependencyObject obj, string text)

        {

            obj.SetValue(AnalysisTextProperty, text);

        }

 

        public static readonly DependencyProperty AnalysisTextProperty =

DependencyProperty.RegisterAttached("AnalysisText", typeof(string), typeof(AsyncNotifier), new PropertyMetadata(string.Empty, AnalysisTextCallback));

 

        private static readonly DependencyProperty SpinnerProperty =

DependencyProperty.RegisterAttached("Spinner", typeof(Grid), typeof(AsyncNotifier));

 

 

        public static void SetTrigger(DependencyObject obj, bool trigger)

        {

            obj.SetValue(TriggerProperty, trigger);

        }

 

        public static readonly DependencyProperty TriggerProperty =

    DependencyProperty.RegisterAttached("Trigger", typeof(bool), typeof(AsyncNotifier));

 

        private static void AnalysisTextCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

            var parentGrid = d as Grid;

            if (parentGrid == null)

                return;

            bool trigger = (bool)parentGrid.GetValue(TriggerProperty);

            Grid grid = parentGrid.GetValue(SpinnerProperty) as Grid;

            if (grid == null)

            {

                grid = new Grid();

                parentGrid.SetValue(SpinnerProperty, grid);

                if (parentGrid.ColumnDefinitions.Count > 0)

                    Grid.SetColumnSpan(grid, parentGrid.ColumnDefinitions.Count);

                if (parentGrid.RowDefinitions.Count > 0)

                    Grid.SetRowSpan(grid, parentGrid.RowDefinitions.Count);

            }

            grid.Background = Brushes.Transparent;

            grid.Children.Clear();

            ContentControl cont = new ContentControl();

            StackPanel sp = new StackPanel();

            TextBlock tb = new TextBlock() { Margin = new Thickness(0, 110, 0, 0), Text = e.NewValue == null ? string.Empty : e.NewValue.ToString() };

            sp.Children.Add(tb);

            cont.Content = sp;

            cont.FontWeight = FontWeights.Bold;

            cont.Style = (Style)parentGrid.FindResource("LoadingAdorner");

            grid.Children.Add(cont);

            if (!parentGrid.Children.Contains(grid))

                parentGrid.Children.Add(grid);

            grid.Visibility = (e.NewValue != null && trigger) ? Visibility.Visible : Visibility.Hidden;

        }

    }

 

 

        private bool _isDataLoading;

        public bool IsDataLoading

        {

            get { return _isDataLoading; }

            set

            {

                _isDataLoading = value;

                this.OnPropertyChanged("IsDataLoading");

            }

        }

 

        private string _analysisText;

        public string AnalysisText

        {

            get { return _analysisText; }

            set

            {

                _analysisText = value;

                this.OnPropertyChanged("AnalysisText");

            }

        }

 

 

 

                    IsDataLoading = false;

                    this.AnalysisText = null;

 

 

 

 

             xmlns:Loader="clr-namespace:Rich.Testability.View.Analysis"

             xmlns:Uc="clr-namespace:Rich.Testability.View.ObjectTree"

             mc:Ignorable="d" 

             DataContextChanged="UserControl_DataContextChanged" >

    <Grid Loader:AsyncNotifier.Trigger="{Binding Path=IsDataLoading}"

          Loader:AsyncNotifier.AnalysisText="{Binding Path=AnalysisText}">

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics