private void SubscribeToStateChanging(bool subscribe = true)
        {
            if (VisualTreeHelper.GetChildrenCount((DependencyObject)this._listScrollViewer) <= 0)
            {
                return;
            }
            FrameworkElement child = VisualTreeHelper.GetChild((DependencyObject)this._listScrollViewer, 0) as FrameworkElement;

            if (child == null)
            {
                return;
            }
            VisualStateGroup visualState = MyVirtualizingPanel.FindVisualState(child, "ScrollStates");

            if (visualState == null)
            {
                return;
            }
            if (subscribe)
            {
                visualState.CurrentStateChanging += (new EventHandler <VisualStateChangedEventArgs>(this.group_CurrentStateChanging));
            }
            else
            {
                visualState.CurrentStateChanging -= (new EventHandler <VisualStateChangedEventArgs>(this.group_CurrentStateChanging));
            }
        }
        private void HookupScrollEvents()
        {
            if (this.ScrollViewer == null)
            {
                return;
            }
            FrameworkElement child = VisualTreeHelper.GetChild((DependencyObject)this.ScrollViewer, 0) as FrameworkElement;

            if (child == null)
            {
                return;
            }
            VisualStateGroup visualState = MyVirtualizingPanel.FindVisualState(child, "VerticalCompression");

            if (visualState == null)
            {
                return;
            }
            visualState.CurrentStateChanging += (new EventHandler <VisualStateChangedEventArgs>(this.vgroup_CurrentStateChanging));
        }