Skip to content

Commit

Permalink
(GH-3436, GH-3430, GH-3241) Fix for first HamburgerMenu item loaded s…
Browse files Browse the repository at this point in the history
…election
  • Loading branch information
punker76 committed Jan 29, 2019
1 parent a248bbe commit 81222d8
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 47 deletions.
63 changes: 21 additions & 42 deletions src/MahApps.Metro/Controls/HamburgerMenu/HamburgerMenu.Events.cs
@@ -1,7 +1,6 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace MahApps.Metro.Controls
{
Expand Down Expand Up @@ -42,8 +41,20 @@ private void OnItemClick()
(selectedItem as HamburgerMenuItem)?.RaiseCommand();
RaiseItemCommand();

RaiseItemEvents(selectedItem);
}

private bool RaiseItemEvents(object selectedItem)
{
if (selectedItem is null || (ItemClick is null && ItemInvoked is null))
{
return false;
}

ItemClick?.Invoke(this, new ItemClickEventArgs(selectedItem));
ItemInvoked?.Invoke(this, new HamburgerMenuItemInvokedEventArgs() { InvokedItem = selectedItem, IsItemOptions = false });

return true;
}

private void OnOptionsItemClick()
Expand All @@ -58,67 +69,35 @@ private void OnOptionsItemClick()
(selectedItem as HamburgerMenuItem)?.RaiseCommand();
RaiseOptionsItemCommand();

OptionsItemClick?.Invoke(this, new ItemClickEventArgs(selectedItem));
ItemInvoked?.Invoke(this, new HamburgerMenuItemInvokedEventArgs() { InvokedItem = selectedItem, IsItemOptions = true });
RaiseOptionsItemEvents(selectedItem);
}

private ListBoxItem GetClickedListBoxItem(ItemsControl itemsControl, DependencyObject dependencyObject)
private bool RaiseOptionsItemEvents(object selectedItem)
{
if (itemsControl == null || dependencyObject == null)
if (selectedItem is null || (OptionsItemClick is null && ItemInvoked is null))
{
return null;
return false;
}
var item = ItemsControl.ContainerFromElement(itemsControl, dependencyObject) as ListBoxItem;
return item;
}

private void ButtonsListView_ItemClick(object sender, MouseButtonEventArgs e)
{
var item = GetClickedListBoxItem(sender as ItemsControl, e.OriginalSource as DependencyObject);
if (item != null)
{
// ListBox item clicked - do some cool things here
OnItemClick();
}
}
OptionsItemClick?.Invoke(this, new ItemClickEventArgs(selectedItem));
ItemInvoked?.Invoke(this, new HamburgerMenuItemInvokedEventArgs() { InvokedItem = selectedItem, IsItemOptions = true });

private void OptionsListView_ItemClick(object sender, MouseButtonEventArgs e)
{
var item = GetClickedListBoxItem(sender as ItemsControl, e.OriginalSource as DependencyObject);
if (item != null)
{
// ListBox item clicked - do some cool things here
OnOptionsItemClick();
}
return true;
}

private void ButtonsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems != null && e.AddedItems.Count > 0)
{
if (Keyboard.IsKeyToggled(Key.Space) ||
Keyboard.IsKeyToggled(Key.Up) ||
Keyboard.IsKeyToggled(Key.PageUp) ||
Keyboard.IsKeyToggled(Key.Down) ||
Keyboard.IsKeyToggled(Key.PageDown))
{
OnItemClick();
}
OnItemClick();
}
}

private void OptionsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems != null && e.AddedItems.Count > 0)
{
if (Keyboard.IsKeyToggled(Key.Space) ||
Keyboard.IsKeyToggled(Key.Up) ||
Keyboard.IsKeyToggled(Key.PageUp) ||
Keyboard.IsKeyToggled(Key.Down) ||
Keyboard.IsKeyToggled(Key.PageDown))
{
OnOptionsItemClick();
}
OnOptionsItemClick();
}
}
}
Expand Down
16 changes: 11 additions & 5 deletions src/MahApps.Metro/Controls/HamburgerMenu/HamburgerMenu.cs
Expand Up @@ -35,13 +35,11 @@ public override void OnApplyTemplate()

if (_buttonsListView != null)
{
_buttonsListView.MouseUp -= ButtonsListView_ItemClick;
_buttonsListView.SelectionChanged -= ButtonsListView_SelectionChanged;
}

if (_optionsListView != null)
{
_optionsListView.MouseUp -= OptionsListView_ItemClick;
_optionsListView.SelectionChanged -= OptionsListView_SelectionChanged;
}

Expand All @@ -56,13 +54,11 @@ public override void OnApplyTemplate()

if (_buttonsListView != null)
{
_buttonsListView.MouseUp += ButtonsListView_ItemClick;
_buttonsListView.SelectionChanged += ButtonsListView_SelectionChanged;
}

if (_optionsListView != null)
{
_optionsListView.MouseUp += OptionsListView_ItemClick;
_optionsListView.SelectionChanged += OptionsListView_SelectionChanged;
}

Expand All @@ -81,11 +77,21 @@ private void HamburgerMenu_Loaded(object sender, RoutedEventArgs e)
return;
}

if (RaiseItemEvents(_buttonsListView?.SelectedItem))
{
return;
}

if (RaiseOptionsItemEvents(_optionsListView?.SelectedItem))
{
return;
}

var selectedItem = _buttonsListView?.SelectedItem ?? _optionsListView?.SelectedItem;
if (selectedItem != null)
{
SetCurrentValue(ContentProperty, selectedItem);
}
}
}
}
}
2 changes: 2 additions & 0 deletions src/MahApps.Metro/Themes/HamburgerMenuTemplate.xaml
Expand Up @@ -349,6 +349,7 @@
Controls:ScrollViewerHelper.VerticalScrollBarOnLeftSide="{TemplateBinding VerticalScrollBarOnLeftSide}"
AutomationProperties.Name="Menu items"
Foreground="{TemplateBinding PaneForeground}"
IsTextSearchEnabled="False"
ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
ItemTemplate="{TemplateBinding ItemTemplate}"
ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Expand All @@ -366,6 +367,7 @@
VerticalAlignment="Bottom"
AutomationProperties.Name="Option items"
Foreground="{TemplateBinding PaneForeground}"
IsTextSearchEnabled="False"
ItemContainerStyle="{TemplateBinding OptionsItemContainerStyle}"
ItemTemplate="{TemplateBinding OptionsItemTemplate}"
ItemTemplateSelector="{TemplateBinding OptionsItemTemplateSelector}"
Expand Down

0 comments on commit 81222d8

Please sign in to comment.