2009-06-18 11 views
11

के पीछे कोड में क्षेत्र जोड़ें मेरे पास एक समग्र WPF अनुप्रयोग है। मेरे मॉड्यूल में से एक में मैं एक जादूगर बनाना चाहता हूं और एक क्षेत्र में कदम दिखाना चाहता हूं ताकि मैं चरणों के बीच स्विच कर सकूं। मूल रूप से मेरे पास यह विज़ार्ड एक टैब क्षेत्र में दिख रहा था और नेस्टेड क्षेत्र ठीक काम करता था। अब मैं इसे एक मोडल डायलॉग बॉक्स में बनाना चाहता हूं, लेकिन इसे खोलने के बाद भी आंतरिक क्षेत्र को क्षेत्र प्रबंधक के साथ पंजीकृत नहीं किया जाता है; तो मैं अपने जादूगर कदम नहीं जोड़ सकता।डब्ल्यूपीएफ, प्रिज्म वी 2, एक मॉडल संवाद में क्षेत्र,

मैं इस धारणा के तहत था कि क्षेत्र प्रबंधक वैश्विक था, और केवल कैल जोड़ रहा था: RegionManager.RegionName = "WizardSteps" ऐसा करेगा, लेकिन स्पष्ट रूप से नहीं।

यदि मैं क्षेत्र प्रबंधक को देखने के लिए पास करता हूं तो मैं इसका उपयोग कर सकता हूं ... क्या कोई जानता है कि कोड में कंटेंट कंट्रोल में कोई क्षेत्र कैसे जोड़ना है?

उत्तर

17

समस्या यह है कि क्षेत्र RegionManager संलग्न संपत्ति के लिए दृश्य पेड़ की खोज करते हैं, और फिर उस प्रबंधक के साथ स्वयं को पंजीकृत करते हैं। मुख्य खिड़की में यह ठीक है, लेकिन एक बच्चे की खिड़की में ऐसा नहीं होता है।

बूटस्ट्रैपर में, खोल बनाने के बाद, निम्न कोड निष्पादित किया जाता है।

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

प्राप्त करने के लिए इस क्षेत्र के प्रबंधक अपने बच्चे को खिड़की के साथ काम करने के लिए एक ही बात सही होने के बाद आप विंडो बना लिया है।

संपादित

एक नियंत्रण के क्षेत्र का नाम सेट करने के लिए, आप भी RegionManager के संलग्न संपत्ति है, इसलिए की तरह सेट किया ...

RegionManager.SetRegionName(control, "MyRegion"); 

आप XAML रूप में अच्छी तरह से कर सकते हैं हालांकि। एक अलग खिड़की में आपके क्षेत्र काम क्यों नहीं करते हैं क्योंकि क्षेत्र प्रबंधक को बेस विंडो पर सेट करने की आवश्यकता है, जैसा मैंने ऊपर दिखाया था।

+0

यह कोड मेरी मदद करने के लिए प्रतीत नहीं होता है, मेरे क्षेत्र प्रबंधक को SetRegionManager(), या UpdateRegions() नामक एक फ्यूशन नहीं लगता है। क्या कोड में नया क्षेत्र बनाने का कोई तरीका नहीं है? – Shaboboo

+2

ये क्षेत्र प्रबंधक वर्ग पर स्थिर कॉल हैं, उदाहरण के तरीकों से नहीं। कोड में क्षेत्रों को बनाने के तरीके को दिखाने के लिए मैं अपना उत्तर अपडेट करूंगा। –

+0

क्षेत्र नाम सेट करने के लिए RegionManager की स्थैतिक विधि को इंगित करने के लिए धन्यवाद। मुझे इसी की तो तलाश थी! –

0

मुझे कुछ ऐसा लगता है जो लगभग काम कर रहा है। मुझे यकीन है कि अगर मैं सामग्री के क्षेत्र के सक्रिय दृश्य को सामग्री के साथ जोड़ सकता हूं तो यह काम करेगा, लेकिन मैंने अभी तक इसे प्रबंधित नहीं किया है।

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

यह वास्तव में काफी सरल है।

अपने पॉपअप xaml में एक क्षेत्रनाम जोड़ें जैसा कि आप खोल में करते हैं। - बाद के संस्करणों में बहुत ज्यादा अलग नहीं होना चाहिए

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

यह प्रिज्म v.1 में मेरे लिए काम करता है: फिर पॉपअप निर्माता में, निम्नलिखित कॉल जोड़ें।

संबंधित मुद्दे