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" />

 

posted @ 2021-06-07 13:04  cbaa  阅读(177)  评论(0)    收藏  举报