Beispiel #1
0
        void ExecuteNav(HamburgerButtonInfo commandInfo)
        {
            DebugWrite($"HamburgerButtonInfo: {commandInfo}");

            if (commandInfo == null)
            {
                throw new NullReferenceException("CommandParameter is not set");
            }

            if (commandInfo.PageType != null)
            {
                Selected = commandInfo;
            }
        }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            IsOpen = false;

            // reset all, except selected
            _navButtons
            .Where(x => x.Value != value)
            .ForEach(x =>
            {
                x.Value.IsChecked = false;
            });

            // navigate
            if (value?.PageType != null)
            {
                if (NavigationService.Navigate(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    if (value.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                }
                else
                {
                    return;
                }
            }

            // undo previous
            if (previous?.IsChecked ?? true && previous != value)
            {
                previous?.RaiseUnselected();
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
 void ExecuteNav(HamburgerButtonInfo commandInfo)
 {
     if (commandInfo == null)
         throw new NullReferenceException("CommandParameter is not set");
     try
     {
         if (commandInfo.PageType != null)
             Selected = commandInfo;
     }
     finally
     {
         if (commandInfo.ClearHistory)
             NavigationService.ClearHistory();
     }
 }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            // This was added to fix an issue where the HamburgerMenu would open and close immediately
            // if the Hamburger button was clicked after starting the app in the narrowest VisualState.
            if (_navButtonsLoaded)
            {
                IsOpen = false;
            }

            // undo previous
            if (previous != null && previous != value)
            {
                previous.RaiseUnselected();
            }

            // reset all
            var values = _navButtons.Select(x => x.Value);

            foreach (var item in values.Where(x => x != value))
            {
                item.IsChecked = false;
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }

            // navigate only to new pages
            if (value.PageType == null)
            {
                return;
            }
            if (value.PageType.Equals(NavigationService.CurrentPageType) && (value.PageParameter?.Equals(NavigationService.CurrentPageParam) ?? false))
            {
                return;
            }
            NavigationService.Navigate(value.PageType, value.PageParameter);
        }
Beispiel #5
0
        internal void HighlightCorrectButton(Type pageType, object pageParam)
        {
            _isHighlightCorrectButtonRunning = true;
            try
            {
                HamburgerButtonInfo newButton = null;

                // match type only
                var buttons = LoadedNavButtons.Where(x => Equals(x.HamburgerButtonInfo.PageType, pageType));
                if (buttons.Any())
                {
                    // serialize parameter for matching
                    if (pageParam == null)
                    {
                        pageParam = NavigationService.CurrentPageParam;
                    }

                    // add parameter match
                    buttons   = buttons.Where(x => Equals(x.HamburgerButtonInfo.PageParameter, null) || Equals(x.HamburgerButtonInfo.PageParameter, pageParam));
                    newButton = buttons.OrderByDescending(x => x.HamburgerButtonInfo.PageParameter)
                                .Select(x => x.HamburgerButtonInfo).FirstOrDefault();
                }

                // Update selected button
                var oldButton = Selected;
                if (!ReferenceEquals(oldButton, newButton))
                {
                    Selected = newButton;
                    if (oldButton?.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle)
                    {
                        oldButton.IsChecked = false;
                    }
                    if (newButton?.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle)
                    {
                        newButton.IsChecked = true;
                    }
                }

                // Update internal binding values for both buttons
                oldButton?.UpdateInternalBindingValues();
                newButton?.UpdateInternalBindingValues();
            }
            finally
            {
                _isHighlightCorrectButtonRunning = false;
            }
        }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            if (previous != null)
            {
                IsOpen = false;
            }

            // undo previous
            if (previous != null && previous != value)
            {
                previous.RaiseUnselected();
            }

            // reset all
            var values = _navButtons.Select(x => x.Value);

            foreach (var item in values.Where(x => x != value))
            {
                item.IsChecked = false;
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }

            // navigate only to new pages
            if (value.PageType == null)
            {
                return;
            }
            if (value.PageType.Equals(NavigationService.CurrentPageType) && (value.PageParameter?.Equals(NavigationService.CurrentPageParam) ?? false))
            {
                return;
            }
            NavigationService.Navigate(value.PageType, value.PageParameter);
        }
Beispiel #7
0
        async void SelectedPropertyChanged(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            if ((value?.Equals(previous) ?? false))
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
            }

            SelectedChanged?.Invoke(this, new ChangedEventArgs <HamburgerButtonInfo>(previous, value));

            try
            {
                await UpdateSelectedAsync(previous, value);
            }
            catch (Exception ex)
            {
                DebugWrite($"Catch Ex.Message: {ex.Message}", caller: "SelectedPropertyChanged");
            }
        }
        private static void SetGlyphForeground(HamburgerButtonInfo info, Brush brush)
        {
            var stack = info?.Content as StackPanel;

            if (stack == null)
                return;

            var icon = stack.Children.OfType<GlyphIcon>().FirstOrDefault();
            if (icon != null)
            {
                icon.Foreground = brush;
            }
            var text = stack.Children.OfType<TextBlock>().FirstOrDefault();
            if (text != null)
            {
                text.Foreground = brush;
            }
        }
        void ExecuteNav(HamburgerButtonInfo commandInfo)
        {
            DebugWrite($"HamburgerButtonInfo: {commandInfo}");

            if (commandInfo == null)
            {
                throw new NullReferenceException("CommandParameter is not set");
            }

            if (commandInfo.PageType != null)
            {
                Selected = commandInfo;
            }
            else
            {
                ExecuteNavButtonICommand(commandInfo);
                commandInfo.RaiseTapped(new RoutedEventArgs());
            }
        }
 void ExecuteNav(HamburgerButtonInfo commandInfo)
 {
     if (commandInfo == null)
     {
         throw new NullReferenceException("CommandParameter is not set");
     }
     try
     {
         if (commandInfo.PageType != null)
         {
             Selected = commandInfo;
         }
     }
     finally
     {
         if (commandInfo.ClearHistory)
         {
             NavigationService.ClearHistory();
         }
     }
 }
Beispiel #11
0
        void ExecuteNav(HamburgerButtonInfo commandInfo)
        {
            if (!IsFullScreen)
            {
                if (commandInfo == null)
                {
                    throw new NullReferenceException("CommandParameter is not set");
                }

                if (commandInfo.PageType != null)
                {
                    Selected = commandInfo;
                }
                else
                {
                    ExecuteNavButtonICommand(commandInfo);
                    commandInfo.RaiseTapped(new RoutedEventArgs());
                    CommandButttonTapped?.Invoke(commandInfo, null);
                }
            }
        }
Beispiel #12
0
        private async Task UpdateSelectedAsync(HamburgerButtonInfo previous, HamburgerButtonInfo current)
        {
            // pls. do not remove this if statement. this is the fix for #410 (click twice)
            if (previous != null)
            {
                IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
            }

            // signal previous
            if (previous != null && previous != current && previous.IsChecked.Value)
            {
                // Workaround for visual state of ToggleButton not reset correctly
                if (current != null)
                {
                    var control = LoadedNavButtons.First(x => x.HamburgerButtonInfo == current).GetElement <Control>();
                    VisualStateManager.GoToState(control, "Normal", true);
                }
            }

            // navigate only when all navigation buttons have been loaded
            if (AllNavButtonsAreLoaded && current?.PageType != null)
            {
                if (await NavigationService.NavigateAsync(current.PageType, current?.PageParameter, current?.NavigationTransitionInfo))
                {
                    SignalPreviousPage(previous, current);
                    SignalCurrentPage(previous, current);

                    IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
                    if (current.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                    if (current.ClearCache)
                    {
                        var frameState = await(NavigationService.FrameFacade as ITemplate10FrameInternal).GetFrameStateAsync();
                        await frameState.ClearAsync();
                    }
                }
                else if (NavigationService.CurrentPageType == current.PageType && (NavigationService.CurrentPageParam ?? string.Empty) == (current.PageParameter ?? string.Empty))
                {
                    SignalPreviousPage(previous, current);
                    SignalCurrentPage(previous, current);

                    if (current.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                    if (current.ClearCache)
                    {
                        var frameState = await(NavigationService.FrameFacade as ITemplate10FrameInternal).GetFrameStateAsync();
                        await frameState.ClearAsync();
                    }
                }
                else if (previous == null || NavigationService.CurrentPageType == current.PageType)
                {
                    SignalCurrentPage(previous, current);
                }
                else
                {
                    // Re-instate Selected to previous page, but avoid calling this method (UpdateSelectedAsync) all over
                    // again, and we use a flag to effect this. See InternalSelectedChanged() method where it's used.

                    _isUpdateSelectedRunning = true;
                    try
                    {
                        Selected = previous;
                    }
                    finally
                    {
                        _isUpdateSelectedRunning = false;
                    }
                    current.IsChecked = false;
                    current.RaiseUnselected();
                    return;
                }
            }
            else
            {
                SignalPreviousPage(previous, current);
                SignalCurrentPage(previous, current);
            }
        }
        void ExecuteNav(HamburgerButtonInfo commandInfo)
        {
            DebugWrite($"HamburgerButtonInfo: {commandInfo}");

            if (commandInfo == null)
                throw new NullReferenceException("CommandParameter is not set");

            if (commandInfo.PageType != null)
                Selected = commandInfo;
        }
        //void NavButton_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
        //{
        //    DebugWrite();

        //    var button = new InfoElement(sender);
        //    ExecuteICommand(button.HamburgerButtonInfo);
        //    button.HamburgerButtonInfo.RaiseTapped(e);
        //    e.Handled = true;
        //}

        void ExecuteICommand(HamburgerButtonInfo info)
        {
            ICommand command = info.Command;
            if (command != null)
            {
                var commandParameter = info.CommandParameter;
                if (command.CanExecute(commandParameter))
                {
                    command.Execute(commandParameter);
                }
            }
        }
        void ExecuteNav(HamburgerButtonInfo commandInfo)
        {
            DebugWrite($"HamburgerButtonInfo: {commandInfo}");

            if (commandInfo == null)
            {
                throw new NullReferenceException("CommandParameter is not set");
            }

            if (commandInfo.PageType != null)
            {
                Selected = commandInfo;
            }
            else
            {
                ExecuteICommand(commandInfo);
                commandInfo.RaiseTapped(new RoutedEventArgs());
            }
        }
        async Task UpdateSelectedAsync(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            // pls. do not remove this if statement. this is the fix for #410 (click twice)
            if (previous != null)
            {
                IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
            }

            // signal previous
            if (previous != null && previous != value && previous.IsChecked.Value)
            {
                previous.IsChecked = false;
                previous.RaiseUnselected();

                // Workaround for visual state of ToggleButton not reset correctly
                var fwe = LoadedNavButtons.Where(x => x.HamburgerButtonInfo == previous)
                    .Select(x => x.FrameworkElement)
                    .FirstOrDefault() as Control;
                if (fwe != null)
                {
                    VisualStateManager.GoToState(fwe, "Normal", true);
                }
            }

            // navigate only when all navigation buttons have been loaded
            if (AllNavButtonsAreLoaded && value?.PageType != null)
            {
                if (await NavigationService.NavigateAsync(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
                    if (value.ClearHistory)
                        NavigationService.ClearHistory();
                }
                else if (NavigationService.CurrentPageType == value.PageType
                     && (NavigationService.CurrentPageParam ?? string.Empty) == (value.PageParameter ?? string.Empty))
                {
                    if (value.ClearHistory)
                        NavigationService.ClearHistory();
                }
                else if (NavigationService.CurrentPageType == value.PageType)
                {
                    // just check it
                }
                else
                {
                    return;
                }
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
        async void SelectedPropertyChanged(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            if ((value?.Equals(previous) ?? false))
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
            }

            SelectedChanged?.Invoke(this, new ChangedEventArgs<HamburgerButtonInfo>(previous, value));

            try
            {
                await UpdateSelectedAsync(previous, value);
            }
            catch (Exception ex)
            {
                DebugWrite($"Catch Ex.Message: {ex.Message}", caller: "SelectedPropertyChanged");
            }
        }
        private async Task SetSelectedAsync(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            // do not remove this if statement
            //// this is the fix for #410 (click twice)
            if (previous != null)
            {
                IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
            }

            // undo previous
            if (previous?.IsChecked ?? true && previous != value)
            {
                previous?.RaiseUnselected();
            }

            // reset all, except selected
            _navButtons.Where(x => x.Value != value)
            .ForEach(x => { x.Value.IsChecked = false; });

            // navigate only when all navigation buttons have been loaded
            if (_areNavButtonsLoaded && value?.PageType != null)
            {
                if (await NavigationService.NavigateAsync(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
                    if (value.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                }
                else if (NavigationService.CurrentPageType == value.PageType &&
                         (NavigationService.CurrentPageParam ?? string.Empty) == (value.PageParameter ?? string.Empty))
                {
                    if (value.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                }
                else if (NavigationService.CurrentPageType == value.PageType)
                {
                    // just check it
                }
                else
                {
                    return;
                }
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
        private async Task UpdateSelectedAsync(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            // pls. do not remove this if statement. this is the fix for #410 (click twice)
            if (previous != null)
            {
                IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
            }

            // signal previous
            if (previous != null && previous != value && previous.IsChecked.Value)
            {
                previous.IsChecked = false;
                previous.RaiseUnselected();

                // Workaround for visual state of ToggleButton not reset correctly
                if (value != null)
                {
                    var control = LoadedNavButtons.First(x => x.HamburgerButtonInfo == value).GetElement <Control>();
                    VisualStateManager.GoToState(control, "Normal", true);
                }
            }

            // navigate only when all navigation buttons have been loaded
            if (AllNavButtonsAreLoaded && value?.PageType != null)
            {
                if (await NavigationService.NavigateAsync(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
                    if (value.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                    if (value.ClearCache)
                    {
                        NavigationService.ClearCache(true);
                    }
                }
                else if (NavigationService.CurrentPageType == value.PageType &&
                         (NavigationService.CurrentPageParam ?? string.Empty) == (value.PageParameter ?? string.Empty))
                {
                    if (value.ClearHistory)
                    {
                        NavigationService.ClearHistory();
                    }
                    if (value.ClearCache)
                    {
                        NavigationService.ClearCache(true);
                    }
                }
                else if (NavigationService.CurrentPageType == value.PageType)
                {
                    // just check it
                }
                else
                {
                    return;
                }
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            IsOpen = false;

            // reset all, except selected
            _navButtons
                .Where(x => x.Value != value)
                .ForEach(x =>
                {
                    x.Value.IsChecked = false;
                });

            // navigate
            if (value?.PageType != null)
            {
                if (NavigationService.Navigate(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    if (value.ClearHistory)
                        NavigationService.ClearHistory();
                }
                else
                {
                    return;
                }
            }

            // undo previous
            if (previous?.IsChecked ?? true && previous != value)
            {
                previous?.RaiseUnselected();
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            DebugWrite($"OldValue: {previous}, NewValue: {value}");

            // do not remove this if statement
            //// this is the fix for #410 (click twice)
            if (previous != null)
                IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);

            // undo previous
            if (previous?.IsChecked ?? true && previous != value)
            {
                previous?.RaiseUnselected();
            }

            // reset all, except selected
            _navButtons.Where(x => x.Value != value)
                .ForEach(x => { x.Value.IsChecked = false; });

            // navigate only when all navigation buttons have been loaded
            if (_areNavButtonsLoaded && value?.PageType != null)
            {
                if (NavigationService.Navigate(value.PageType, value?.PageParameter, value?.NavigationTransitionInfo))
                {
                    IsOpen = (DisplayMode == SplitViewDisplayMode.CompactInline && IsOpen);
                    if (value.ClearHistory)
                        NavigationService.ClearHistory();
                }
                else if (NavigationService.CurrentPageType == value.PageType
                     && (NavigationService.CurrentPageParam ?? string.Empty) == (value.PageParameter ?? string.Empty))
                {
                    if (value.ClearHistory)
                        NavigationService.ClearHistory();
                }
                else if (NavigationService.CurrentPageType == value.PageType)
                {
                    // just check it
                }
                else
                {
                    return;
                }
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = (value.ButtonType == HamburgerButtonInfo.ButtonTypes.Toggle);
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }
        }
        private void SetSelected(HamburgerButtonInfo previous, HamburgerButtonInfo value)
        {
            IsOpen = false;

            // undo previous
            if (previous != null && previous != value)
            {
                previous.RaiseUnselected();
            }

            // reset all
            var values = _navButtons.Select(x => x.Value);
            foreach (var item in values.Where(x => x != value))
            {
                item.IsChecked = false;
            }

            // that's it if null
            if (value == null)
            {
                return;
            }
            else
            {
                value.IsChecked = true;
                if (previous != value)
                {
                    value.RaiseSelected();
                }
            }

            // navigate only to new pages
            if (value.PageType == null) return;
            if (value.PageType.Equals(NavigationService.CurrentPageType) && (value.PageParameter?.Equals(NavigationService.CurrentPageParam) ?? false)) return;
            NavigationService.Navigate(value.PageType, value.PageParameter);
        }