2013-06-25 4 views
2

В любом случае, чтобы получить hostcontrol/parentcontrol из региона в PRISM C# WPF. Я пытаюсь написать поведение пользовательского региона, которое изменяет управление хостом, если в регионе нет представлений.Получить HostControl из региона в PRISM

В классе RegionBehavior есть свойство HostControl, но оно не имеет значения null. Как установить его? или как получить hostcontrol. Спасибо за совет!

[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 не имеет никакого эффекта. Если вы посмотрите исходный код PRISM в RegionBehaviorCollection.cs (Prism.Dektop.Regions), вы ясно увидите, что метод Add не делает ничего, связанного с интерфейсом IHostAwareRegionBehavior.

Однако в RegionAdapterBase.cs интерфейс проверяется на AttachDefaultBehaviors.

В результате я зарегистрировал свой RegionBehavior в загрузчике и проверил имя региона, чтобы увидеть, есть ли работа, которую нужно выполнить. Не очень чистый, но он работает.

+0

Да, я тоже это заметил. Кажется, что IHostAwareRegionBehavior работает только тогда, когда в bootstrapper после этого этапа он не может найти HostControl. Благодаря! – Tan

Смежные вопросы