Пример #1
0
        protected override async Task OnParametersSetAsync()
        {
            previousVisibility = currentVisibility;

            if (IsOpen && (currentVisibility == ModalVisibilityState.Closed || currentVisibility == ModalVisibilityState.AnimatingClosed))
            {
                currentVisibility = ModalVisibilityState.AnimatingOpen;
            }
            if (!IsOpen && (currentVisibility == ModalVisibilityState.Open || currentVisibility == ModalVisibilityState.AnimatingOpen))
            {
                currentVisibility = ModalVisibilityState.AnimatingClosed;
                // This StateHasChanged call was added because using a custom close button in NavigationTemplate did not cause a state change to occur.
                // The result was that the animation class would not get added and the close transition would not show.  This is a hack to make it work.
                StateHasChanged();
            }

            Debug.WriteLine($"Was: {previousVisibility}  Current:{currentVisibility}");

            if (_jsAvailable)
            {
                if (currentVisibility != previousVisibility)
                {
                    Debug.WriteLine("Clearing animation timer");
                    _clearExistingAnimationTimer();
                    if (currentVisibility == ModalVisibilityState.AnimatingOpen)
                    {
                        isAnimating          = true;
                        animationRenderStart = true;
                        _animateTo(ModalVisibilityState.Open);
                    }
                    else if (currentVisibility == ModalVisibilityState.AnimatingClosed)
                    {
                        isAnimating = true;
                        _animateTo(ModalVisibilityState.Closed);
                    }
                }
            }

            await base.OnParametersSetAsync();
        }
Пример #2
0
        public Modal()
        {
            _animationTimer = new Timer();
            _clearExistingAnimationTimer = () =>
            {
                if (_animationTimer.Enabled)
                {
                    _animationTimer.Stop();
                    _animationTimer.Elapsed -= _handler;
                }
            };

            _animateTo = (animationState) =>
            {
                _animationTimer.Interval = 200;
                _handler = null;
                _handler = (s, e) =>
                {
                    InvokeAsync(() =>
                    {
                        //Debug.WriteLine("Inside invokeAsync from animateTo timer elapsed");
                        _animationTimer.Elapsed -= _handler;
                        _animationTimer.Stop();

                        previousVisibility = currentVisibility;
                        currentVisibility  = animationState;
                        _onTransitionComplete();
                    });
                };
                _animationTimer.Elapsed += _handler;
                _animationTimer.Start();
            };

            _onTransitionComplete = () =>
            {
                isAnimating = false;
                StateHasChanged();
            };
        }