コード例 #1
0
        private bool TryGetSmartStatus()
        {
            var cp = ContentPresenter;

            if (cp == null)
            {
                return(false);
            }

            var descendantsOnce = cp
                                  .GetVisualDescendants()
                                  .ToList();

            _pauseAndResumeChild = descendantsOnce.OfType <ISupportPauseResume>().FirstOrDefault();

            _loadStatusObject = descendantsOnce.OfType <ISendLoadStatus>().FirstOrDefault();

            // If the bindings never get applied due to visibility converters.
            var uie = _loadStatusObject as UIElement;

            if (uie != null && uie.Visibility == Visibility.Collapsed)
            {
                _loadStatusObject = null;
            }

            if (_loadStatusObject == null)
            {
                // Pause and resume is not support for these two.
                var fe = descendantsOnce
                         .OfType <ItemsControl>()
                         .Where(it => it.ItemsSource is ISendLoadStatus)
                         .FirstOrDefault();
                if (fe != null)
                {
                    _loadStatusObject = (ISendLoadStatus)fe.ItemsSource;
                }

                if (_loadStatusObject == null)
                {
                    var de = descendantsOnce
                             .OfType <FrameworkElement>()
                             .Where(ff => ff.DataContext is ISendLoadStatus)
                             .FirstOrDefault();
                    if (de != null)
                    {
                        _loadStatusObject = de.DataContext as ISendLoadStatus;
                    }
                }
            }

            return(_loadStatusObject != null);
        }
コード例 #2
0
        private void RetryGettingPauseResumeChild()
        {
            var cp = ContentPresenter;

            if (cp == null)
            {
                return;
            }

            var descendantsOnce = cp
                                  .GetVisualDescendants()
                                  .ToList();

            _pauseAndResumeChild = descendantsOnce.OfType <ISupportPauseResume>().FirstOrDefault();
        }
コード例 #3
0
//        private void WaitForSpecializedContent()
//        {
////#if DEBUG_LOADING_PIVOT_ITEM
//            //Debug.WriteLine("     ... but the data isn't ready yet.");
////#endif
//            if (!_contentPresenterUnloaded)
//            {
//                if (_advancedWaitingElement.IsLoadComplete)
//                {
//                    DelayedDispatcherTimer.BeginInvoke(AdditionalLoadTime, FinallyShowContent);
//                }
//                else
//                {
//                    DelayedDispatcherTimer.BeginInvoke(SmartLoadingDelayingTime, WaitForSpecializedContent);
//                }
//            }
//        }

        private void TryTransitionToContent()
        {
            if (_contentPresenterUnloaded)
            {
                return;
            }

//#if DEBUG_LOADING_PIVOT_ITEM
            //Debug.WriteLine("LPI: DataContext of {0} is set to {1}", Header.ToString(), DataContext.ToString());
//#endif

            // Visuals first to grab any control.
            var descendantsOnce = _contentPresenter.GetVisualDescendants().ToList();

            _pauseAndResumeChild = descendantsOnce.OfType <ISupportPauseResume>().FirstOrDefault();
            //_advancedWaitingElement = descendantsOnce.OfType<ISendLoadComplete>().FirstOrDefault();
            _dataStatusElement = descendantsOnce.OfType <ISendLoadStatus>().FirstOrDefault();

            // If the bindings never get applied due to visibility converters.
            //var uie = _advancedWaitingElement as UIElement;
            var uie = _dataStatusElement as UIElement;

            if (uie != null && uie.Visibility == Visibility.Collapsed)
            {
                _dataStatusElement = null;
                //_advancedWaitingElement = null;
            }

            if (_dataStatusElement /*_advancedWaitingElement */ == null)
            {
                // Pause and resume is not support for these two.
                var fe =
                    descendantsOnce.OfType <ItemsControl>().Where(it => it.ItemsSource is ISendLoadStatus).
                    FirstOrDefault();
                if (fe != null)
                {
                    _dataStatusElement = (ISendLoadStatus)fe.ItemsSource;
                    //_advancedWaitingElement = (ISendLoadComplete) fe.ItemsSource;
                }

                if (_dataStatusElement /*_advancedWaitingElement */ == null)
                {
                    var de =
                        descendantsOnce.OfType <FrameworkElement>().Where(ff => ff.DataContext is ISendLoadStatus)
                        .FirstOrDefault();
                    if (de != null)
                    {
                        _dataStatusElement = de.DataContext as ISendLoadStatus;
//                        _advancedWaitingElement = de.DataContext as ISendLoadComplete;
                    }
                }
            }

            if (_dataStatusElement /*_advancedWaitingElement */ != null)
            {
#if DEBUG_LOADING_PIVOT_ITEM
                Debug.WriteLine("LPI: Custom item base {0} supports load notifications. Excellent.", _dataStatusElement.GetType().ToString());
#endif
//                if (_advancedWaitingElement.IsLoadComplete)
                if (_dataStatusElement.LoadStatus == LoadStatus.Loaded || _dataStatusElement.LoadStatus == LoadStatus.Failed)
                {
                    OnceSpecializedContentIsReady();
                }
                else
                {
                    _dataStatusElement.LoadStatusChanged += OnAdvancedWaitingElementLoadComplete;
                    //_advancedWaitingElement.LoadComplete += OnAdvancedWaitingElementLoadComplete;
                    //return;
                }

                // don't let it appear by accident...
                return;
            }

            Debug.Assert(!_contentPresenterUnloaded);

            DelayedDispatcherTimer.BeginInvoke(AdditionalLoadTime, FinallyShowContent);
        }
コード例 #4
0
//        private void WaitForSpecializedContent()
//        {
////#if DEBUG_LOADING_PIVOT_ITEM
//            //Debug.WriteLine("     ... but the data isn't ready yet.");
////#endif
//            if (!_contentPresenterUnloaded)
//            {
//                if (_advancedWaitingElement.IsLoadComplete)
//                {
//                    DelayedDispatcherTimer.BeginInvoke(AdditionalLoadTime, FinallyShowContent);
//                }
//                else
//                {
//                    DelayedDispatcherTimer.BeginInvoke(SmartLoadingDelayingTime, WaitForSpecializedContent);
//                }
//            }
//        }

        private void TryTransitionToContent()
        {
            if (_contentPresenterUnloaded)
            {
                return;
            }

//#if DEBUG_LOADING_PIVOT_ITEM
            //Debug.WriteLine("LPI: DataContext of {0} is set to {1}", Header.ToString(), DataContext.ToString());
//#endif

            // Visuals first to grab any control.
            var descendantsOnce = _contentPresenter.GetVisualDescendants().ToList();
            _pauseAndResumeChild = descendantsOnce.OfType<ISupportPauseResume>().FirstOrDefault();
            //_advancedWaitingElement = descendantsOnce.OfType<ISendLoadComplete>().FirstOrDefault();
            _dataStatusElement = descendantsOnce.OfType<ISendLoadStatus>().FirstOrDefault();

            // If the bindings never get applied due to visibility converters.
            //var uie = _advancedWaitingElement as UIElement;
            var uie = _dataStatusElement as UIElement;
            if (uie != null && uie.Visibility == Visibility.Collapsed)
            {
                _dataStatusElement = null;
                //_advancedWaitingElement = null;
            }

            if (_dataStatusElement /*_advancedWaitingElement */== null)
            {
                // Pause and resume is not support for these two.
                var fe =
                    descendantsOnce.OfType<ItemsControl>().Where(it => it.ItemsSource is ISendLoadStatus).
                        FirstOrDefault();
                if (fe != null)
                {
                    _dataStatusElement = (ISendLoadStatus)fe.ItemsSource;
                    //_advancedWaitingElement = (ISendLoadComplete) fe.ItemsSource;
                }

                if (_dataStatusElement /*_advancedWaitingElement */ == null)
                {
                    var de =
                        descendantsOnce.OfType<FrameworkElement>().Where(ff => ff.DataContext is ISendLoadStatus)
                            .FirstOrDefault();
                    if (de != null)
                    {
                        _dataStatusElement = de.DataContext as ISendLoadStatus;
//                        _advancedWaitingElement = de.DataContext as ISendLoadComplete;
                    }
                }
            }

            if (_dataStatusElement/*_advancedWaitingElement */!= null)
            {
#if DEBUG_LOADING_PIVOT_ITEM
                Debug.WriteLine("LPI: Custom item base {0} supports load notifications. Excellent.", _dataStatusElement.GetType().ToString());
#endif
//                if (_advancedWaitingElement.IsLoadComplete)
                if (_dataStatusElement.LoadStatus == LoadStatus.Loaded || _dataStatusElement.LoadStatus == LoadStatus.Failed)
                {
                    OnceSpecializedContentIsReady();
                }
                else
                {
                    _dataStatusElement.LoadStatusChanged += OnAdvancedWaitingElementLoadComplete;
                    //_advancedWaitingElement.LoadComplete += OnAdvancedWaitingElementLoadComplete;
                    //return;
                }

                // don't let it appear by accident...
                return;
            }

            Debug.Assert(!_contentPresenterUnloaded);

            DelayedDispatcherTimer.BeginInvoke(AdditionalLoadTime, FinallyShowContent);
        }
コード例 #5
0
        private bool TryGetSmartStatus()
        {
            var cp = ContentPresenter;
            if (cp == null)
            {
                return false;
            }

            var descendantsOnce = cp
                .GetVisualDescendants()
                .ToList();

            _pauseAndResumeChild = descendantsOnce.OfType<ISupportPauseResume>().FirstOrDefault();

            _loadStatusObject = descendantsOnce.OfType<ISendLoadStatus>().FirstOrDefault();

            // If the bindings never get applied due to visibility converters.
            var uie = _loadStatusObject as UIElement;
            if (uie != null && uie.Visibility == Visibility.Collapsed)
            {
                _loadStatusObject = null;
            }

            if (_loadStatusObject == null)
            {
                // Pause and resume is not support for these two.
                var fe = descendantsOnce
                    .OfType<ItemsControl>()
                    .Where(it => it.ItemsSource is ISendLoadStatus)
                    .FirstOrDefault();
                if (fe != null)
                {
                    _loadStatusObject = (ISendLoadStatus)fe.ItemsSource;
                }

                if (_loadStatusObject == null)
                {
                    var de = descendantsOnce
                        .OfType<FrameworkElement>()
                        .Where(ff => ff.DataContext is ISendLoadStatus)
                        .FirstOrDefault();
                    if (de != null)
                    {
                        _loadStatusObject = de.DataContext as ISendLoadStatus;
                    }
                }
            }

            return (_loadStatusObject != null);
        }
コード例 #6
0
        private void RetryGettingPauseResumeChild()
        {
            var cp = ContentPresenter;
            if (cp == null)
            {
                return;
            }

            var descendantsOnce = cp
                .GetVisualDescendants()
                .ToList();

            _pauseAndResumeChild = descendantsOnce.OfType<ISupportPauseResume>().FirstOrDefault();
        }