Skip to content

Commit

Permalink
Fixes #766 by using helper methods/extensions
Browse files Browse the repository at this point in the history
That's required to make sure we get the correct containers we are interested in and not just some ContentPresenter
  • Loading branch information
batzen committed Dec 27, 2019
1 parent 704e387 commit b52e70b
Show file tree
Hide file tree
Showing 17 changed files with 230 additions and 83 deletions.
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
## 7.1.0
- ### Bug fixes
- [#745](../../issues/745) - SplitButton.IsEnabled based on Command.CanExecute?
- [#765](../../issues/765) - InRibbonGallery Resizing Issues
- [#766](../../issues/766) - Resizing of InRibbonGallery in a DataTemplate does not work

- ### Enhancements/Features
- Many automation peers have been added and improved
Expand Down
14 changes: 7 additions & 7 deletions Fluent.Ribbon/Controls/BackstageTabControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace Fluent
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using Fluent.Extensions;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;

Expand Down Expand Up @@ -391,17 +392,17 @@ protected override void OnSelectionChanged(SelectionChangedEventArgs e)
/// <returns>The currently selected <see cref="BackstageTabItem"/>. Or null of nothing was selected and nothing could be selected.</returns>
private BackstageTabItem GetSelectedTabItem()
{
var container = this.ItemContainerGenerator.ContainerFromItem(this.SelectedItem) as BackstageTabItem
?? (this.ItemContainerGenerator.ContainerFromItem(this.SelectedItem) as ContentPresenter)?.Content as BackstageTabItem;
var container = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<BackstageTabItem>(this.SelectedItem);

if (container == null
|| container?.IsEnabled == false
|| container?.Visibility != Visibility.Visible)
|| container.IsEnabled == false
|| container.Visibility != Visibility.Visible)
{
container = this.FindNextTabItem(this.SelectedIndex, 1);

if (container != null)
{
this.SelectedItem = this.ItemContainerGenerator.ItemFromContainer(container);
this.SelectedItem = this.ItemContainerGenerator.ItemFromContainerOrContainerContent(container);
}
}

Expand Down Expand Up @@ -430,8 +431,7 @@ private BackstageTabItem FindNextTabItem(int startIndex, int direction)
index = this.Items.Count - 1;
}

var container = this.ItemContainerGenerator.ContainerFromIndex(index) as BackstageTabItem
?? (this.ItemContainerGenerator.ContainerFromIndex(index) as ContentPresenter)?.Content as BackstageTabItem;
var container = this.ItemContainerGenerator.ContainerOrContainerContentFromIndex<BackstageTabItem>(index);
if (container != null
&& container.IsEnabled
&& container.Visibility == Visibility.Visible)
Expand Down
10 changes: 6 additions & 4 deletions Fluent.Ribbon/Controls/BackstageTabItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ namespace Fluent
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using Fluent.Extensions;
using Fluent.Helpers;
using Fluent.Internal.KnownBoxes;

/// <summary>
Expand Down Expand Up @@ -76,7 +78,7 @@ internal BackstageTabControl TabControlParent
{
get
{
return ItemsControl.ItemsControlFromItemContainer(this) as BackstageTabControl;
return ItemsControlHelper.ItemsControlFromItemContainer(this) as BackstageTabControl;
}
}

Expand Down Expand Up @@ -148,11 +150,11 @@ private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyCh
if (newValue)
{
if (container.TabControlParent != null
&& ReferenceEquals(container.TabControlParent.ItemContainerGenerator.ContainerFromItem(container.TabControlParent.SelectedItem), container) == false)
&& ReferenceEquals(container.TabControlParent.ItemContainerGenerator.ContainerOrContainerContentFromItem<BackstageTabItem>(container.TabControlParent.SelectedItem), container) == false)
{
UnselectSelectedItem(container.TabControlParent);

container.TabControlParent.SelectedItem = container.TabControlParent.ItemContainerGenerator.ItemFromContainer(container);
container.TabControlParent.SelectedItem = container.TabControlParent.ItemContainerGenerator.ItemFromContainerOrContainerContent(container);
}

container.OnSelected(new RoutedEventArgs(Selector.SelectedEvent, container));
Expand All @@ -170,7 +172,7 @@ private static void UnselectSelectedItem(BackstageTabControl backstageTabControl
return;
}

if (backstageTabControl.ItemContainerGenerator.ContainerFromItem(backstageTabControl.SelectedItem) is BackstageTabItem backstageTabItem)
if (backstageTabControl.ItemContainerGenerator.ContainerOrContainerContentFromItem<BackstageTabItem>(backstageTabControl.SelectedItem) is BackstageTabItem backstageTabItem)
{
backstageTabItem.IsSelected = false;
}
Expand Down
24 changes: 12 additions & 12 deletions Fluent.Ribbon/Controls/ComboBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Fluent
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using Fluent.Extensions;
using Fluent.Internal;
using Fluent.Helpers;
using Fluent.Internal.KnownBoxes;

/// <summary>
Expand Down Expand Up @@ -413,7 +413,7 @@ private void BringSelectedItemIntoView()
return;
}

var containerFromItem = this.quickAccessCombo.ItemContainerGenerator.ContainerFromItem(this.quickAccessCombo.SelectedItem) as FrameworkElement;
var containerFromItem = this.quickAccessCombo.ItemContainerGenerator.ContainerOrContainerContentFromItem<FrameworkElement>(this.quickAccessCombo.SelectedItem);
containerFromItem?.BringIntoView();
}

Expand Down Expand Up @@ -570,7 +570,7 @@ protected override void OnDropDownOpened(EventArgs e)

if (this.SelectedItem != null)
{
Keyboard.Focus(this.ItemContainerGenerator.ContainerFromItem(this.SelectedItem) as IInputElement);
Keyboard.Focus(this.ItemContainerGenerator.ContainerOrContainerContentFromItem<IInputElement>(this.SelectedItem));
}

this.focusedElement = Keyboard.FocusedElement;
Expand Down Expand Up @@ -636,9 +636,9 @@ private void OnFocusedElementLostKeyboardFocus(object sender, KeyboardFocusChang
this.focusedElement.LostKeyboardFocus += this.OnFocusedElementLostKeyboardFocus;

if (this.IsEditable &&
this.Items.Contains(this.ItemContainerGenerator.ItemFromContainer((DependencyObject)Keyboard.FocusedElement)))
this.Items.Contains(this.ItemContainerGenerator.ItemFromContainerOrContainerContent((DependencyObject)Keyboard.FocusedElement)))
{
this.SelectedItem = this.ItemContainerGenerator.ItemFromContainer((DependencyObject)Keyboard.FocusedElement);
this.SelectedItem = this.ItemContainerGenerator.ItemFromContainerOrContainerContent((DependencyObject)Keyboard.FocusedElement);
}
}
}
Expand Down Expand Up @@ -683,30 +683,30 @@ protected override void OnKeyDown(KeyEventArgs e)
{
if (this.Menu.IsKeyboardFocusWithin)
{
Keyboard.Focus(this.ItemContainerGenerator.ContainerFromIndex(0) as IInputElement);
Keyboard.Focus(this.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(0));
}
else
{
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerFromIndex(0) as IInputElement);
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(0));
}

e.Handled = true;
return;
}

if (this.Menu.Items.Contains(this.Menu.ItemContainerGenerator.ItemFromContainer((DependencyObject)Keyboard.FocusedElement)))
if (this.Menu.Items.Contains(this.Menu.ItemContainerGenerator.ItemFromContainerOrContainerContent((DependencyObject)Keyboard.FocusedElement)))
{
if (e.Key == Key.Down)
{
var indexOfMenuSelectedItem = this.Menu.ItemContainerGenerator.IndexFromContainer((DependencyObject)Keyboard.FocusedElement);

if (indexOfMenuSelectedItem != this.Menu.Items.Count - 1)
{
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerFromIndex(indexOfMenuSelectedItem + 1) as IInputElement);
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(indexOfMenuSelectedItem + 1));
}
else
{
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerFromIndex(0) as IInputElement);
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(0));
}

e.Handled = true;
Expand All @@ -719,11 +719,11 @@ protected override void OnKeyDown(KeyEventArgs e)

if (indexOfMenuSelectedItem != 0)
{
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerFromIndex(indexOfMenuSelectedItem - 1) as IInputElement);
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(indexOfMenuSelectedItem - 1));
}
else
{
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerFromIndex(this.Menu.Items.Count - 1) as IInputElement);
Keyboard.Focus(this.Menu.ItemContainerGenerator.ContainerOrContainerContentFromIndex<IInputElement>(this.Menu.Items.Count - 1));
}

e.Handled = true;
Expand Down
2 changes: 1 addition & 1 deletion Fluent.Ribbon/Controls/DropDownButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Fluent
using System.Windows.Markup;
using System.Windows.Threading;
using Fluent.Extensions;
using Fluent.Internal;
using Fluent.Helpers;
using Fluent.Internal.KnownBoxes;

/// <summary>
Expand Down
3 changes: 2 additions & 1 deletion Fluent.Ribbon/Controls/Gallery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace Fluent
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Markup;
using Fluent.Extensions;
using Fluent.Internal.KnownBoxes;

/// <summary>
Expand Down Expand Up @@ -467,7 +468,7 @@ private static object CoerceSelectedItem(DependencyObject d, object basevalue)

if (gallery.Selectable == false)
{
var galleryItem = (GalleryItem)gallery.ItemContainerGenerator.ContainerFromItem(basevalue);
var galleryItem = gallery.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(basevalue);

if (basevalue != null
&& galleryItem != null)
Expand Down
3 changes: 2 additions & 1 deletion Fluent.Ribbon/Controls/GalleryGroupContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ namespace Fluent
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Fluent.Extensions;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;

Expand Down Expand Up @@ -299,7 +300,7 @@ public Size GetItemSize()
return Size.Empty;
}

var anItem = this.ItemContainerGenerator.ContainerFromItem(this.Items[0]) as UIElement;
var anItem = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<UIElement>(this.Items[0]);
if (anItem == null)
{
return Size.Empty;
Expand Down
5 changes: 3 additions & 2 deletions Fluent.Ribbon/Controls/GalleryItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace Fluent
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using Fluent.Extensions;
using Fluent.Helpers;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;

Expand Down Expand Up @@ -302,9 +303,9 @@ private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyCh
{
((GalleryItem)d).BringIntoView();

if (ItemsControl.ItemsControlFromItemContainer(d) is Selector parentSelector)
if (ItemsControlHelper.ItemsControlFromItemContainer(d) is Selector parentSelector)
{
var item = parentSelector.ItemContainerGenerator.ItemFromContainer(d);
var item = parentSelector.ItemContainerGenerator.ItemFromContainerOrContainerContent(d);

if (ReferenceEquals(parentSelector.SelectedItem, item) == false)
{
Expand Down
10 changes: 5 additions & 5 deletions Fluent.Ribbon/Controls/GalleryPanel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -431,18 +431,18 @@ private void Refresh()

// Resolve group name
string propertyValue = null;

if (this.GroupByAdvanced != null)
{
propertyValue = this.ItemContainerGenerator == null
? this.GroupByAdvanced(item)
: this.GroupByAdvanced(this.ItemContainerGenerator.ItemFromContainer(item));
? this.GroupByAdvanced(item)
: this.GroupByAdvanced(this.ItemContainerGenerator.ItemFromContainerOrContainerContent(item));
}
else if (string.IsNullOrEmpty(this.GroupBy) == false)
{
propertyValue = this.ItemContainerGenerator == null
? this.GetPropertyValueAsString(item)
: this.GetPropertyValueAsString(this.ItemContainerGenerator.ItemFromContainer(item));
? this.GetPropertyValueAsString(item)
: this.GetPropertyValueAsString(this.ItemContainerGenerator.ItemFromContainerOrContainerContent(item));
}

if (propertyValue == null)
Expand Down
13 changes: 7 additions & 6 deletions Fluent.Ribbon/Controls/InRibbonGallery.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// ReSharper disable once CheckNamespace
// ReSharper disable once CheckNamespace
namespace Fluent
{
using System;
Expand All @@ -18,6 +18,7 @@ namespace Fluent
using System.Windows.Threading;
using Fluent.Extensibility;
using Fluent.Extensions;
using Fluent.Helpers;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;
using JetBrains.Annotations;
Expand Down Expand Up @@ -939,7 +940,7 @@ private static object CoerceSelectedItem(DependencyObject d, object basevalue)

if (gallery.Selectable == false)
{
var galleryItem = (GalleryItem)gallery.ItemContainerGenerator.ContainerFromItem(basevalue);
var galleryItem = gallery.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(basevalue);
if (basevalue != null
&& galleryItem != null)
{
Expand Down Expand Up @@ -991,15 +992,15 @@ protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
foreach (var item in e.RemovedItems)
{
if (this.ItemContainerGenerator.ContainerFromItem(item) is GalleryItem itemContainer)
if (this.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(item) is GalleryItem itemContainer)
{
itemContainer.IsSelected = false;
}
}

foreach (var item in e.AddedItems)
{
if (this.ItemContainerGenerator.ContainerFromItem(item) is GalleryItem itemContainer)
if (this.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(item) is GalleryItem itemContainer)
{
itemContainer.IsSelected = this.Selectable;
}
Expand Down Expand Up @@ -1206,7 +1207,7 @@ private void OnDropDownClosed(object sender, EventArgs e)
this.galleryPanel.Height = double.NaN;
}
var selectedContainer = this.ItemContainerGenerator.ContainerFromItem(this.SelectedItem) as GalleryItem;
var selectedContainer = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(this.SelectedItem);
selectedContainer?.BringIntoView();
}, DispatcherPriority.SystemIdle);
}
Expand Down Expand Up @@ -1532,7 +1533,7 @@ private void Unfreeze()
this.IsSnapped = false;
}
var selectedContainer = this.ItemContainerGenerator.ContainerFromItem(this.SelectedItem) as GalleryItem;
var selectedContainer = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<GalleryItem>(this.SelectedItem);
selectedContainer?.BringIntoView();
}, DispatcherPriority.SystemIdle);
}
Expand Down
3 changes: 2 additions & 1 deletion Fluent.Ribbon/Controls/MenuItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace Fluent
using System.Windows.Media;
using System.Windows.Threading;
using Fluent.Extensions;
using Fluent.Helpers;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;

Expand Down Expand Up @@ -39,7 +40,7 @@ public class MenuItem : System.Windows.Controls.MenuItem, IQuickAccessItemProvid

#region Properties

private bool IsItemsControlMenuBase => (ItemsControlFromItemContainer(this) ?? VisualTreeHelper.GetParent(this)) is MenuBase;
private bool IsItemsControlMenuBase => (ItemsControlHelper.ItemsControlFromItemContainer(this) ?? VisualTreeHelper.GetParent(this)) is MenuBase;

#region Size

Expand Down
18 changes: 5 additions & 13 deletions Fluent.Ribbon/Controls/RibbonGroupBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace Fluent
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Fluent.Extensions;
using Fluent.Internal;
using Fluent.Internal.KnownBoxes;

Expand Down Expand Up @@ -219,17 +220,10 @@ private void ScaleScaleableItems(ScaleDirection scaleDirection)
{
foreach (var item in this.Items)
{
var element = this.ItemContainerGenerator.ContainerFromItem(item);
var scalableRibbonControl = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<IScalableRibbonControl>(item);

if (element is null
|| (element is UIElement uiElement && uiElement.Visibility != Visibility.Visible))
{
continue;
}

var scalableRibbonControl = element as IScalableRibbonControl;

if (scalableRibbonControl is null)
if (scalableRibbonControl is null
|| (scalableRibbonControl is UIElement uiElement && uiElement.Visibility != Visibility.Visible))
{
continue;
}
Expand Down Expand Up @@ -261,9 +255,7 @@ private void UpdateScalableControlSubscritions(bool registerEvents)
{
foreach (var item in this.Items)
{
var element = this.ItemContainerGenerator.ContainerFromItem(item);

var scalableRibbonControl = element as IScalableRibbonControl;
var scalableRibbonControl = this.ItemContainerGenerator.ContainerOrContainerContentFromItem<IScalableRibbonControl>(item);

if (scalableRibbonControl is null)
{
Expand Down
Loading

0 comments on commit b52e70b

Please sign in to comment.