2013-06-25 42 views
2

有没有办法从PRISM C#WPF中的区域获取hostcontrol/parentcontrol。我试图写一个自定义区域的行为,修改hostcontrol,如果没有在该地区的意见。从PRISM中的区域获取HostControl

RegionBehavior类中有一个HostControl属性,但它是alwasy null。我如何设置它?或如何获得主机控制。 感谢您的咨询!

[Export(typeof(CollapseRegionBehavior))] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class CollapseRegionBehavior : RegionBehavior, IHostAwareRegionBehavior 
{ 

    public DependencyObject HostControl { get; set; } 

    protected override void OnAttach() 
    { 
     if (this.Region.ActiveViews.Count() == 0) 
     { 

     } 
    } 
} 

回答

2

你手动添加RegionBehavior还是你在ConfigureDefaultRegionBehaviors注册它的引导程序?

看来,如果你手动添加的行为是这样的:

IRegion region = regionManager.Regions["MyRegion"]; 
region.Behaviors.Add("MyBehaviorKey", new MyBehavior()); 

IHostAwareRegionBehavior接口没有任何影响。如果您查看RegionBehaviorCollection.cs(Prism.Dektop.Regions)中的PRISM源代码,您将清楚地看到Add方法不会执行任何与IHostAwareRegionBehavior接口相关的任何操作。

但是,在RegionAdapterBase.cs中,将在AttachDefaultBehaviors中检查接口。

我结束了在引导程序中注册我的RegionBehavior并检查区域名称以查看是否有工作要执行。不是很干净,但它工作。

+0

是的,我也注意到了。看起来,IHostAwareRegionBehavior只能在bootstrapper中工作后才能找到HostControl。谢谢! – Tan