示例#1
0
        /// <summary>
        /// Called when IParallaxSource changes
        /// </summary>
        private void OnSourceChanged(View oldSource, View newSource)
        {
            if (m_parallaxSourceView != null)
            {
                m_parallaxSourceView.OffsetChanged -= OnSourceOffsetChanged;
                m_parallaxSourceView = null;
            }

            if (newSource is IParallaxSource)
            {
                m_parallaxSourceView = newSource as IParallaxSource;
                m_parallaxSourceView.OffsetChanged += OnSourceOffsetChanged;
            }
            else
            {
                m_parallaxSourceView = ParallaxLayout.FindParallaxSourceRecursive(newSource);

                if (m_parallaxSourceView != null)
                {
                    m_parallaxSourceView.OffsetChanged += OnSourceOffsetChanged;
                }
            }

            if (m_parallaxSourceView != null)
            {
                OnSourceOffsetChanged(m_parallaxSourceView.HorizontalOffset, m_parallaxSourceView.VerticalOffset);
            }
        }
示例#2
0
        /// <summary>
        /// Called when source changes. If the source element is not a implementing IParallaxSource, the XAML tree is walked
        /// starting at the source element to find an embedded IParallaxSource element.
        /// </summary>
        private void OnSourceChanged(View oldSource, View newSource)
        {
            if (m_parallaxSourceView != null)
            {
                m_parallaxSourceView.OffsetChanged -= OnSourceOffsetChanged;
            }

            if (newSource is IParallaxSource)
            {
                m_parallaxSourceView = newSource as IParallaxSource;
                m_parallaxSourceView.OffsetChanged += OnSourceOffsetChanged;
            }
            else
            {
                m_parallaxSourceView = FindParallaxSourceRecursive(newSource);

                if (m_parallaxSourceView != null)
                {
                    m_parallaxSourceView.OffsetChanged += OnSourceOffsetChanged;
                }
            }
        }
示例#3
0
        /// <summary>
        /// Find IParallaxSource child using recursion
        /// </summary>
        public static IParallaxSource FindParallaxSourceRecursive(View view)
        {
            if (view is IParallaxSource)
            {
                return(view as IParallaxSource);
            }
            else if (view is ILayoutController)
            {
                ILayoutController layout = view as ILayoutController;
                foreach (View child in layout.Children)
                {
                    IParallaxSource source = FindParallaxSourceRecursive(child);

                    if (source != null)
                    {
                        return(source);
                    }
                }
            }

            return(null);
        }