Prism Sample 3 自定义Region
在例2中,我们使用了一个Region
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
上面使用了ContentControl,但在prism中,不是每个控件都能定义为Region的。比如Stack Panel就不行,Grid也不行。如果要用到这样的控件作为区域,就需要定义一个RegionAdapter。
下面就以Stack Panel为例:
public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel> { public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory) { } protected override void Adapt(IRegion region, StackPanel regionTarget) { region.Views.CollectionChanged += (s, e) => { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { foreach (FrameworkElement element in e.NewItems) { regionTarget.Children.Add(element); } } //handle remove }; } protected override IRegion CreateRegion() { return new AllActiveRegion(); } }
有了Adapter,就可以在Stack Panel中定义Region
<StackPanel prism:RegionManager.RegionName="ContentRegion" />

浙公网安备 33010602011771号