2009-06-18 45 views
11

Tôi có một ứng dụng WPF tổng hợp. Trong một trong các mô-đun của tôi, tôi muốn tạo một trình hướng dẫn và có các bước hiển thị trong một vùng để tôi có thể chuyển đổi giữa các bước dễ dàng hơn. Ban đầu tôi đã có thuật sĩ này hiển thị trong một khu vực tab và khu vực lồng nhau làm việc tốt. Bây giờ tôi muốn làm cho nó thành một hộp thoại phương thức, nhưng sau khi tôi mở nó, khu vực bên trong không bao giờ được đăng ký với người quản lý khu vực; Vì vậy, tôi không thể thêm các bước hướng dẫn của mình.WPF, Prism v2, Khu vực trong hộp thoại phương thức, thêm khu vực ở mã sau

Tôi đã có ấn tượng rằng người quản lý khu vực là toàn cầu và chỉ cần thêm cal: RegionManager.RegionName = "WizardSteps" sẽ làm điều đó, nhưng dường như không.

Nếu tôi chuyển người quản lý khu vực đến chế độ xem, tôi có thể sử dụng nó ... Có ai biết cách thêm khu vực vào ContentControl ở mã phía sau không?

Trả lời

17

Vấn đề là các vùng tìm kiếm cây trực quan cho thuộc tính được đính kèm của RegionManager và sau đó tự đăng ký với người quản lý đó. Trong cửa sổ chính là tốt, nhưng trong một cửa sổ con điều này không xảy ra.

Trong Bootstrapper, sau khi trình bao được tạo, mã sau được thực hiện.

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

Để người quản lý khu vực làm việc với cửa sổ con bạn làm điều tương tự ngay sau khi bạn đã tạo cửa sổ.

EDIT

Để thiết lập tên miền của một điều khiển, bạn cũng thiết lập các thuộc tính của RegionManager đính kèm, như vậy ...

RegionManager.SetRegionName(control, "MyRegion"); 

Tuy nhiên bạn có thể làm điều này trong XAML là tốt. Lý do tại sao khu vực của bạn trong một cửa sổ riêng biệt không hoạt động là vì RegionManager cần phải được đặt trên cửa sổ cơ sở, như tôi đã trình bày ở trên.

+0

Mã này dường như không giúp tôi gì, người quản lý vùng của tôi dường như không có một fucntion gọi là SetRegionManager() hoặc UpdateRegions(). Không có cách nào để tạo một khu vực mới trong mã phía sau? – Shaboboo

+2

Đây là các cuộc gọi tĩnh trên lớp RegionManager, không phải là các phương thức thể hiện. Ngoài ra tôi sẽ cập nhật câu trả lời của mình để hiển thị cách tạo các vùng trong mã. –

+0

Cảm ơn bạn đã chỉ ra phương pháp tĩnh của RegionManager để đặt tên vùng. Đó là chính xác những gì tôi đang tìm kiếm! –

0

Tôi đã tìm thấy thứ gì đó gần như hoạt động. Tôi chắc chắn nếu tôi có thể ràng buộc xem hoạt động của khu vực để nội dung nội dung contentContol sau đó nó sẽ làm việc, nhưng tôi đã không quản lý được nêu ra.

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

Nó thực sự khá đơn giản.

Trong cửa sổ bật lên, xaml thêm tên vùng như bạn thực hiện trong trình bao. Sau đó, trong các nhà xây dựng quảng cáo, thêm cuộc gọi sau đây:

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

này làm việc cho tôi trong Prism v.1 - không nên quá nhiều khác nhau trong các phiên bản sau này.

Các vấn đề liên quan