using System.Collections.Specialized; using System.Windows; using Microsoft.Practices.Prism.Regions; using Microsoft.Windows.Controls.Ribbon; namespace PrismRibbonDemo { /// <summary> /// Enables use of a Ribbon control as a Prism region. /// </summary> /// <remarks> See Developer's Guide to Microsoft Prism (Ver. 4), p. 189.</remarks> public class RibbonRegionAdapter : RegionAdapterBase<Ribbon> { /// <summary> /// Default constructor. /// </summary> /// <param name="behaviorFactory">Allows the registration of the default set of RegionBehaviors.</param> public RibbonRegionAdapter(IRegionBehaviorFactory behaviorFactory) : base(behaviorFactory) { } /// <summary> /// Adapts a WPF control to serve as a Prism IRegion. /// </summary> /// <param name="region">The new region being used.</param> /// <param name="regionTarget">The WPF control to adapt.</param> protected override void Adapt(IRegion region, Ribbon regionTarget) { region.Views.CollectionChanged += (sender, e) => { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (FrameworkElement element in e.NewItems) { regionTarget.Items.Add(element); } break; case NotifyCollectionChangedAction.Remove: foreach (UIElement elementLoopVariable in e.OldItems) { var element = elementLoopVariable; if (regionTarget.Items.Contains(element)) { regionTarget.Items.Remove(element); } } break; } }; } protected override IRegion CreateRegion() { return new SingleActiveRegion(); } } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)