5
में उपयोग कर

शायद तुम मुझे समझते कारण है कि मैं दृश्य स्टूडियो 2010 डिजाइनर में एक बिना क्रिया का अपवाद "अवैध XAML" जब एक Page पर निम्न कार्य करना चाहते मदद कर सकता है।सिल्वरलाइट 4: "अमान्य XAML" कनवर्टर DataTemplate

मेरे पास Converter नाम DateTimeConverter है जो किसी दिनांक को जर्मन दिनांक स्ट्रिंग में परिवर्तित करता है। कनवर्टर ठीक काम करता है। मैं नाम स्थान को शामिल किया है और कहा कि पेज के संसाधनों के लिए निम्न:

<navigation:Page.Resources> 
    <myClasses:DateTimeConverter x:Key="dateTime" /> 
</navigation:Page.Resources> 

अब मैं सूची बॉक्स है कि मैं वस्तुओं की एक सूची के लिए बाध्य करना चाहते हैं। मैं कोड में बाध्यकारी करता हूं, लेकिन मैं डेटा टेम्पलेट को परिभाषित करना चाहता हूं। इस प्रकार मैंने अपने लेआउट में निम्नलिखित जोड़ दिए हैं:

<ListBox x:Name="lbConversation" BorderBrush="#00000000"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderThickness="0" Padding="4"> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding Message, Mode=OneWay}" /> 
        <TextBlock Text="{Binding TimeStamp, Mode=OneWay, Converter={StaticResource dateTime}}" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

और जब मैं दौड़ता हूं तो यह ठीक काम करता है। हालांकि, कोड अनुभाग में, डेटा टेम्पलेट के लिए कोड अंडरकुल किया गया है और डिजाइनर "अमान्य XAML" कहता है। जब मैं Converter=... हिस्से को हटाने, यह त्रुटि चला गया है।

इस एक डिजाइनर बग है? मैं क्या कर सकता हूँ?

संपादित
वैसे: ठीक उसी कोड एक WPF परियोजना के भीतर त्रुटि फेंक नहीं है!

+0

क्या आपने xaml में कनवर्टर को परिभाषित करने और डेटा टेम्पलेट में इसे लागू करने के बाद निर्माण किया है? – Jehof

+1

जैसा कि मैंने अपने प्रश्न में कहा था: जब मैं एप्लिकेशन चलाता हूं तो सबकुछ ठीक होता है - जिसका अर्थ है कि मैंने इसे बनाया है :-) इसके अलावा: मैंने आपकी टिप्पणी पढ़ने से पहले एक जवाब स्वीकार कर लिया है - जो इसे हल करता है। –

+0

Google से आने वाले किसी भी व्यक्ति के लिए: मुझे यह भी पता चला कि जब मैं अपने एक्सएएमएल फ़ाइल में नामस्थान खींच रहा था तो मुझे यह समस्या नहीं थी जो अब अस्तित्व में नहीं था। –

उत्तर

7

बस इस सवाल को जोड़ने के रूप में मैं एक समाधान मिल गया।

मेरे मामले का हल यहाँ था: http://forums.silverlight.net/post/618518.aspx

जाहिर है आप अपने प्रोजेक्ट का नाम या विधानसभा नाम पर एक अंतरिक्ष चरित्र नहीं होना चाहिए। डी 'ओह!

उम्मीद है कि यह मदद करता है।

+0

मैं पूरी तरह से इस सवाल के बारे में भूल गया। जब मुझे "सामान्य" डब्ल्यूपीएफ में भी त्रुटियां मिलीं, तो मुझे एहसास हुआ कि असेंबली नामों में रिक्त स्थान इस समस्या का कारण बनते हैं। –

+0

मेरे पास मेरे असेंबली में से कोई भी स्थान नहीं है और मुझे इस समस्या का सामना करना पड़ता है, क्या वास्तविक समस्या को खोजने के लिए डिज़ाइनर को डीबग करने का कोई तरीका है? – Shimmy

+0

दोनों परियोजना नाम (इसे नाम बदलें) और असेंबली नाम बदलने के लिए सावधान रहें (प्रोजेक्ट/गुण/असेंबली नाम पर राइट क्लिक करें)। – Aliens

1

क्षमा करें, सब पर यह दोहराने नहीं कर सकते, तो आप कुछ डिजाइन समय डेटा अजीब त्रुटि के कारण हो सकता है कि क्या ज़रूरत है?

इसके अलावा, चूंकि आपने कहा था कि आप जर्मन तिथियों को आउटपुट करने के लिए कनवर्टर का उपयोग कर रहे हैं ... क्या फ्रेमवर्क इस तरह की चीजों को करने में आसान नहीं होगा, क्योंकि यह शायद उन्हें बेहतर बनाता है? संपूर्ण एप्लिकेशन थ्रेड की संस्कृतिइन्फो को जर्मन पर सेट करें और सभी स्वरूपण उस संस्कृति की सेटिंग्स के साथ किए जाएंगे; बेशक यह अभी भी संभव है कि आप केवल कुछ नियंत्रण अंतर्राष्ट्रीयकरण चाहते हैं ...

+0

हाय, आपके उत्तर के लिए धन्यवाद। बेशक मैं फ्रेमवर्क द्वारा दिनांक स्वरूपण संभाल सकता था। लेकिन मेरे पास अन्य कनवर्टर्स भी हैं, और समस्या उन कनवर्टर्स के लिए भी है। –

1

मुझे आपके Xaml के साथ कुछ भी गलत नहीं दिखाई दे रहा है, हालांकि मुझे आश्चर्य है कि यह ज़ैमल पार्स किए जाने पर भाषा सेटिंग का परिणाम है या नहीं। डिफ़ॉल्ट रूप से Xaml InvariantCulture का उपयोग कर, लेकिन यह लगता है कि दृश्य स्टूडियो में डिजाइनर वर्तमान संस्कृति का उपयोग कर Xaml पार्स पार्स किया गया है। इसलिए कई बार आप रनटाइम पर डिजाइन समय पर व्यवहार में अप्रत्याशित मतभेद प्राप्त कर सकते हैं।

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 

आप पूरी तरह से अपना कनवर्टर की आवश्यकता न पड़े -:

वास्तव में आप InitializeComponent कॉल करने से पहले अपने UserControl के निर्माता में यह कर सकते हैं।

0

जब मैं अपना कनवर्टर आंतरिक चिह्नित करता था तो मैं "अमान्य XAML" त्रुटि में आया था। संशोधक को सार्वजनिक में बदलें और सब कुछ अपेक्षित है।

इस सहायता की आशा करें।

+1

नहीं, मेरे कन्वर्टर्स पहले से ही सार्वजनिक हैं। फिर भी धन्यवाद! –

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