2009-06-18 11 views
11

Mam złożoną aplikację WPF. W jednym z moich modułów chcę utworzyć kreatora i wyświetlić kroki w regionie, aby łatwiej było przełączać się pomiędzy tymi krokami. Pierwotnie miałem tego kreatora pokazującego się w regionie kart, a zagnieżdżony region działał dobrze. Teraz chcę zrobić to w modalnym oknie dialogowym, ale po jego otwarciu wewnętrzny region nigdy nie zostanie zarejestrowany w menedżerze regionu; Więc nie mogę dodać moich kroków kreatora.WPF, Prism v2, Region w modalnym oknie dialogowym, dodaj region w kodzie za

Miałem wrażenie, że menadżer regionu jest globalny, i wystarczy dodać cal: RegionManager.RegionName = "WizardSteps" zrobi to, ale najwyraźniej nie.

Jeśli przekażę menedżera regionu do widoku, być może będę mógł go użyć ... Czy ktoś wie, jak dodać region do ContentControl w kodzie?

Odpowiedz

17

Problem polega na tym, że regiony wyszukują drzewa wizualne dla przypisanej właściwości RegionManager, a następnie rejestrują się przy użyciu tego menedżera. W głównym oknie jest w porządku, ale w oknie podrzędnym tak się nie dzieje.

W Bootstrapper po utworzeniu powłoki wykonywany jest poniższy kod.

RegionManager.SetRegionManager(shell, this.Container.Resolve<IRegionManager>()); 
RegionManager.UpdateRegions(); 

Aby menedżer regionalny mógł pracować z oknem potomnym, wykonaj to samo zaraz po utworzeniu okna.

EDIT

Aby ustawić nazwę regionu z kontrolą, można również ustawić załączony własność RegionManager, tak jak ...

RegionManager.SetRegionName(control, "MyRegion"); 

Jednak można to zrobić w XAML również. Powodem, dla którego twoje regiony w osobnym oknie nie działają, jest to, że menedżer RegionManager musi zostać ustawiony w oknie podstawowym, tak jak pokazano powyżej.

+0

Ten kod wydaje się nie pomagać mi, mój regionmanager wydaje się nie mieć funkcji o nazwie SetRegionManager() lub UpdateRegions(). Czy nie ma możliwości utworzenia nowego regionu z kodem? – Shaboboo

+2

Są to wywołania statyczne w klasie RegionManager, a nie metody instancji. Również zaktualizuję swoją odpowiedź, aby pokazać, jak tworzyć regiony w kodzie. –

+0

Dziękujemy za wskazanie statycznej metody RegionManager w celu ustawienia nazwy regionu. Właśnie tego szukałem! –

0

Znalazłem coś, co prawie działa. Jestem pewien, że gdybym mógł powiązać aktywny widok regionu z treścią contentContol, to działałoby, ale nie udało mi się tego jeszcze.

IRegionManager MyRegionManager = container.Resolve<IRegionManager>(); 
SingleActiveRegion newRegion = new SingleActiveRegion(); 
MyRegionManager.Regions.Add("WizardSteps", newRegion); 

//Binding 
Binding myBinding = new Binding("ActiveViews"); 
myBinding.Source = newRegion; 
view.stepControl.SetBinding(ContentControl.ContentProperty, myBinding); 
7

Jest to całkiem proste.

W swoim wyskakującym Xaml dodaj nazwę regionu tak jak w powłoce. Następnie w wyskakujących okienek konstruktora, dodać następujące połączenia:

public Popup(IRegionManager regionManager) 
{ 
    InitializeComponent(); 
    RegionManager.SetRegionManager(this,regionManager); 
} 

to działa na mnie w Prism v.1 - nie powinno być zbyt dużo różni się w późniejszych wersjach.