2015-06-17 5 views
0

My Shell Окно содержит вторичную всплывающую область от демонстрационного приложения Stock Trader RIWPF PRISM - Отображение несколько всплывающего вида на то же самое время

infBehaviors:RegionPopupBehaviors.CreatePopupRegionWithName="{x:Static inf:RegionNames.SecondaryRegion}" 

Я активирующий свои взгляды, используя метод RequestNavigate в RegionManager в :

regionManager.RequestNavigate(RegionNames.SecondaryRegion, new Uri(FooView, UriKind.Relative)); 

Все работает нормально, если я работаю только с одним представлением. Однако в моем случае я хочу иметь сразу несколько всплывающих окон - например, сразу несколько всплывающих областей. Похоже, что проблема заключается в активации/дезактивации представлений внутри региона.

Как «убедить» не деактивировать мой предыдущий вид внутри региона?

Любая идея?

ответ

0

Оказалось, что решение проще, чем я ожидал. Вот решение в случае, если enybody нуждается в нем.

Мне просто нужно было изменить RegionPopupBehaviours, чтобы использовать AllActiveregion вместо исходного SingleActiveRegion, а в DialogActivation мне пришлось удалить первый вызов CloseContentDialog.

Надеюсь, что это помогает.

+0

Я пробовал то же самое, но получил исключение в Region.Deactivate в ContentDialogClosed. Если я тоже это прокомментирую, если я закрою всплывающее окно, оно никогда не появится. Я думал, что решение состоит в создании нескольких регионов каждый раз, вызывая RegisterNewPopupRegion из RegionPopupBehaviors. Если ваше решение работает, это будет намного проще. Что вы еще делали, кроме тех, что были упомянуты выше? – asb

+0

Вы имели в виду, что вам удалось одновременно отображать несколько всплывающих окон? можете ли вы предоставить больше кода, как вы это сделали? –

0

Я столкнулся с этой проблемой, и я подумал, что буду расширять ее на посту @ Sebastjan, поскольку это может помочь кому-то по дороге.

Используя код из демки Stock Trader RI, в классе RegionPopupBehaviors, метод RegisterNewPopupRegion должен выглядеть следующим образом:

public static void RegisterNewPopupRegion(DependencyObject owner, string regionName) 
    { 
     IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
     if (regionManager != null) 
     { 
      IRegion region = new AllActiveRegion(); //This was changed from SingleActiveRegion 
      DialogActivationBehavior behavior; 
      behavior = new WindowDialogActivationBehavior(); 
      behavior.HostControl = owner; 

      region.Behaviors.Add(DialogActivationBehavior.BehaviorKey, behavior); 
      regionManager.Regions.Add(regionName, region); 
     } 
    } 

Для всех, кто не имеет образец кода для приложения фондового трейдера, вы можете найти его here

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

  • Нет связанных вопросов^_^