wpf - Dynamically Loading XAML that uses types which have code-behind -


उदाहरण XAML को गतिशील रूप से लोड किया जा सकता है

  & lt; Grid xmlns = 'http: // Schemas.microsoft.com/winfx/2006/xaml/presentation 'xmlns: x =' http: //schemas.microsoft.com/winfx/2006/xaml 'xmlns: usercontrols =' clr- नामस्थान: App.Views.UserControls ' & gt; & Lt; TextBlock & gt; आप बटन पर क्लिक क्यों नहीं करते? & Lt; / TextBlock & gt; & Lt; usercontrols: सुपरबटन कमांड = "{बाध्यकारी डाटा कोंटेन्टेक्स्ट। ओपनURL न्यू, रिलेटिव सोरस = {रिलेटिव सोर्स खोजअनिस्टर, पूर्वज प्रकार = {x: प्रकार सामग्रीप्रदर्शक}}" कमांडपैमेटर = "50" & gt; ClickMe & lt; / usercontrols: SuperButton & gt; & Lt; / ग्रिड & gt;   

यह असफल होने के साथ 'अज्ञात प्रकार के उपयोगकर्ता नियंत्रण को लोड नहीं कर सकता: सुपरबटटन', इस तथ्य के बावजूद कि सुपरबटन को उसी विधानसभा में परिभाषित किया गया है।

मैं यह अनुमान लगा रहा हूं इसका कारण यह है कि सुपरबटन ने कोड-पीछे पहचाना है? क्या XamlReader.Load () को इसकी ज़रूरतों को खोजने के लिए कोई तरीका है?

आप क्या कर रहे हैं काम करना चाहिए - xmlns: usercontrols = '' में पूरी तरह से योग्य असेंबली नाम का उपयोग करने का प्रयास करें।

मैंने कुछ समय पहले यह सही काम किया था (संभवतः शायद मैंने लिखा था कि नेटगू लाइब्रेरी उपयोगी हो सकती है तुम्हारे लिए)। उपयोगकर्ता-परिभाषित कंट्रोल्स के समर्थन के साथ पृष्ठ में गतिमान रूप से नेटगूई लोड एक्सएएमएम लोड करता है।

मेरा एक्सएएमएल हेडर इस तरह दिखता है:

& lt; ग्रिड xmlns = "http: // स्कीमा .microsoft.com / winfx / 2006 / xaml / प्रस्तुति "xmlns: x =" http://schemas.microsoft.com/winfx/2006/xaml "चौड़ाई =" 499 "ऊँचाई =" 579 "xmlns: प्लेबैक =" clr -नामस्पेस: इनले शेअर्ड.यूआई कंट्रोल। प्लेबैक; विधानसभा = इनले शेयर किया गया "एक्सएमएलएन: लाइब्रेरी =" सीएलआर-नेमस्पेस: इनले शेयर। यूआई कंट्रोल। लाइब्रेरी; विधानसभा = इनले शेयर "& gt;

नियंत्रण जैसे उपयोग करें:

& lt; प्लेबैक: वॉल्यूमस्लिडर अधिकतम = "100" न्यूनतम = "0" मार्जिन = "42,180,62,0" ऊँचाई = "30" वर्टिकलएलिन्मेंट = "टॉप" टिकफ्रेक्विंज = " 10 "टिकप्सेमेंट =" नीचे राइट "/>

और गतिशील XAML लोडिंग इस तरह से:

  _gSystem.invokeOnLocalThread ((कार्रवाई) (() = & Gt; {FileStream fileStream = File.OpenRead (_sUIfile); निर्भरता ऑब्जेक्ट निर्भरता ऑब्जेक्ट = XamlReader.Load (fileStream) के रूप में निर्भरता ऑब्जेक्ट; fileStream.Close (); यदि (निर्भरता ऑब्जेक्ट == रिक्त) रिटर्न; सामग्री = निर्भर encyObject; }), सच);   

शायद मैं कस्टम नियंत्रणों को ध्यान में रखने के लिए XAML को प्राप्त करने के लिए कुछ महत्वपूर्ण भाग भूल गया लेकिन मुझे पूरा यकीन है कि यह अभी तक काम कर रहा है।

शुभकामनाएँ (उम्मीद है कि पूरी तरह से योग्य परिवर्तन आपके लिए इसे ठीक करता है)



Comments