Browse Source

Make MenuItem.Icon a logical child of MenuItem.

So that it can be styled.
portable-xaml
Steven Kirk 10 years ago
parent
commit
fe1132bc4d
  1. 22
      src/Perspex.Controls/MenuItem.cs
  2. 13
      src/Perspex.Controls/Mixins/ContentControlMixin.cs

22
src/Perspex.Controls/MenuItem.cs

@ -9,6 +9,7 @@ using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
using Perspex.Input;
using Perspex.Interactivity;
using Perspex.LogicalTree;
using Perspex.Threading;
namespace Perspex.Controls
@ -92,6 +93,7 @@ namespace Perspex.Controls
{
SelectableMixin.Attach<MenuItem>(IsSelectedProperty);
FocusableProperty.OverrideDefaultValue<MenuItem>(true);
IconProperty.Changed.AddClassHandler<MenuItem>(x => x.IconChanged);
ItemsPanelProperty.OverrideDefaultValue<MenuItem>(DefaultPanel);
ClickEvent.AddClassHandler<MenuItem>(x => x.OnClick);
SubmenuOpenedEvent.AddClassHandler<MenuItem>(x => x.OnSubmenuOpened);
@ -391,6 +393,26 @@ namespace Perspex.Controls
}
}
/// <summary>
/// Called when the <see cref="Icon"/> property changes.
/// </summary>
/// <param name="e">The property change event.</param>
private void IconChanged(PerspexPropertyChangedEventArgs e)
{
var oldValue = e.OldValue as ILogical;
var newValue = e.NewValue as ILogical;
if (oldValue != null)
{
LogicalChildren.Remove(oldValue);
}
if (newValue != null)
{
LogicalChildren.Add(newValue);
}
}
/// <summary>
/// Called when the <see cref="IsSubMenuOpen"/> property changes.
/// </summary>

13
src/Perspex.Controls/Mixins/ContentControlMixin.cs

@ -64,12 +64,19 @@ namespace Perspex.Controls.Mixins
var logicalChildren = logicalChildrenSelector(sender);
var subscription = presenter
.GetObservable(ContentPresenter.ChildProperty)
.GetObservableWithHistory(ContentPresenter.ChildProperty)
.Subscribe(child => UpdateLogicalChild(
sender,
logicalChildren,
logicalChildren.FirstOrDefault(),
child));
child.Item1,
child.Item2));
UpdateLogicalChild(
sender,
logicalChildren,
null,
presenter.GetValue(ContentPresenter.ChildProperty));
subscriptions.Value.Add(sender, subscription);
}
}

Loading…
Cancel
Save