2009-11-25 11 views
11

तक पहुँचना मैं प्रोग्राम के मैं XAML में होगा के रूप में ज्यादा स्थिर संसाधनों का उपयोग करना चाहते हैं:प्रोग्राम के एक सिल्वरलाइट स्टेटिक संसाधन

<TextBlock Text="{Binding Source={StaticResource My.Text.Key}}" /> 

यह काम करता है कि मेरे स्थिर संसाधन TextBlock पर परिभाषित किया गया है, कुछ माता पिता तत्व (जैसे UserControl) या यहां तक ​​कि आवेदन भी। ऐसा लगता है कि या तो स्टेटिक रिसोर्स बाध्यकारी अभिव्यक्ति जानता है कि तत्व पेड़ कैसे चलना है, या तत्व स्वयं ही करता है। मैं प्रोग्राम के एक ही बात करना चाहते हैं:

<UserControl x:Class="MyCustomControl" ...> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources.xaml"/> <!-- Sets 'My.Text.Key' to System.String 'Hello, World!' --> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </UserControl.Resources> 
</UserControl> 

public partial class MyCustomControl 
{ 
    public MyCustomControl() 
    { 
     InitializeComponent(); 
     string myCustomValue = this.Resources[MyCustomValue] as string; // myCustomValue becomes null! 
    } 
} 

यहां तक ​​कि इस साधारण परीक्षण में, मेरे संसाधन प्रोग्राम के पहुँचा जा नहीं कर पा रहे। और यह वास्तव में क्या करने की कोशिश कर रहा था इसका सरलीकृत संस्करण है: किसी तत्व के माध्यम से एक स्थिर संसाधन ढूंढें जिसमें मेरे पास एक कस्टम डायनामिक प्रॉपर्टी है (उदा। UiElement.Resources [key])।

+0

जब मैंने अपनी कुंजी ("My.Test.Key" के बजाय "MyTestKey" को "डॉट्स" लिया, तो मैं अपने संसाधनों को प्रोग्रामेटिक रूप से देखना शुरू कर सकता था। क्या XAML या कोड में संसाधनों का नामकरण करने का कोई नियम है -इंडिंड? – Trinition

उत्तर

17

इसके विपरीत आपकी टिप्पणी के बावजूद मुझे "।" के उपयोग पर संदेह है। आपकी संसाधन कुंजी में वास्तव में आपकी समस्या का स्रोत है। इस स्थिति में "।" इसका कोई विशेष अर्थ नहीं है और संसाधनों तक पहुंचने पर असर नहीं पड़ेगा। (मैंने कोशिश की है और इसके साथ किसी भी समस्या को पुन: उत्पन्न करने में विफल रहा है)।

हालांकि {StaticResource MyName} मार्क अप एक्सटेंशन और संसाधन प्रोग्रामेटिक रूप से खोजने का प्रयास करने के बीच बहुत बड़ा अंतर है।

मार्कअप एक्सटेंशन XamlParser को ResourcesFrameworkElement की निर्दिष्ट कुंजी को देखने के लिए कारण बनाता है जिस पर संपत्ति सौंपा जा रहा है। यदि कुंजी नहीं मिली है तो यह इसे पेरेंट FrameworkElement में ढूंढती है और यह तब तक चलती रहती है जब तक यह रूट FrameworkElement तक पहुंच जाती है। यदि यह अभी भी नहीं मिला है तो यह एप्लिकेशन की संसाधन संपत्ति में एक नज़र डालें।

दूसरी ओर इस कोड: -

string myCustomValue = this.Resources[MyCustomValue] as string; 

sf सिर्फ उपयोगकर्ता नियंत्रण के लिए एक संसाधन संपत्ति में देख। पूर्वजों या आवेदन संसाधनों में कुंजी का शिकार करने के लिए कोई प्रयास नहीं किया गया है। यह एक साधारण शब्दकोश लुकअप है। मुझे संदेह है कि वास्तव में आपको क्या चल रहा था।

यह कहकर कि मैं "।" एक संसाधन कुंजी में एक अच्छा विचार नहीं हो सकता है। "।" इसका मतलब है कि पहले से ही विभिन्न एक्सएएमएल परिदृश्यों में इसका उपयोग मुख्य नामों में किया जा रहा है, साथ ही साथ डेवलपर को कोड पढ़ने में भ्रमित करने की क्षमता भी है, भले ही सिल्वरलाइट इसके साथ काफी खुश है।

+0

आपका उत्तर वह सीधा जवाब है जिसे मैं ढूंढ रहा था: एक्सएएमएल-पार्स-टाइम रिसोर्स लुक पदानुक्रमित है, जबकि प्रोग्रामैटिक संसाधन एक्सेस नहीं है। मेरी इच्छा है कि एक्सएएमएल पार्सर का उपयोग पदानुक्रमित तर्क प्रोग्रामिक उपयोग के लिए भी खुलासा हो ।, हालांकि मैं आश्वस्त हूँ नहीं डॉट्स, एक मुद्दा या तो और डॉट्स ReSharper के लिए एक समस्या का कारण है। यह अपने वाक्य रचना हाइलाइटिंग confuses मेरे इरादे डॉट्स उपयोग कर रहा है बेहतर छद्म में संसाधनों को अलग किया गया था। नामस्थान ताकि मेरे प्रत्येक प्रिज्म मॉड्यूल संसाधनों को परिभाषित कर सकें और कॉल में भाग न सकें अन्य मॉड्यूल के साथ आयनों। – Trinition

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