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); }
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); }
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(); } } }
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); } } }
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); }