从PRISM的地区获取HostControl

时间:2013-06-25 12:38:40

标签: c# wpf prism prism-4

无论如何从PRISM C#WPF中的某个区域获取hostcontrol / parentcontrol。我试图编写一个自定义区域行为,如果区域中没有视图,则会修改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)
        {

        }
    }
}

1 个答案:

答案 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并检查了区域名称以查看是否有工作要执行。不是很干净,但它确实有效。