2012-09-12 11 views
6

मैं कोड लिख रहा हूं जिसका उपयोग WPF और Silverlight दोनों में किया जाता है। सी # में मैं सशर्त संकलन के लिए "#if SILVERLIGHT" का उपयोग कर सकता हूं, और यह काम करता है।टी 4 का उपयोग कर डब्ल्यूपीएफ और सिल्वरलाइट के लिए एकीकृत एक्सएएमएल?

एक्सएएमएल में, हालांकि, मुझे पूरी तरह से अलग एक्सएएमएल फाइलों का उपयोग करना होगा, क्योंकि कुछ विशेषताएं केवल असंगत हैं। एक्सएएमएल फाइलें 99% जैसी हैं, और उन्हें सिंक में रखते हुए एक परेशानी है।

मैं उन्हें एक टी -4 टेम्पलेट में तब्दील करना चाहते हैं, तो मैं की तरह कर सकते हैं:

<SomeControl <#=ClipsToBounds()#> /> 

कहाँ ClipsToBounds() WPF और Silverlight के लिए अलग अलग पाठ पैदा करता है। आवश्यकताएँ हैं:

  • Intellisense जबकि निर्माण समय पर उत्पन्न XAML
  • टेम्पलेट्स पर काम कर
  • परियोजना आत्म निहित किया जाना चाहिए और विजुअल स्टूडियो का जायजा संस्करण पर काम: विभिन्न SDK और 3 पार्टी संपादकों को इंस्टॉल किए स्वीकार्य
  • टेम्पलेट रन के परिणाम स्रोत नियंत्रण में नहीं होना चाहिए। -

मैंने पाया कि मैं MSBuild:Compile to TextTemplatingFileGenerator से एक XAML फाइल पर custom tool को बदल सकते हैं और मैं Intellisense खोना नहीं है। हालांकि, परिणामस्वरूप टेम्पलेट डिजाइन समय पर उत्पन्न होते हैं। फिर निर्माण समय पर उत्पन्न होने के लिए एक बड़ा दर्द लगता है।

क्या किसी के पास इस तरह के सेटअप के साथ सफल अनुभव है?

+0

एक पोर्टेबल क्लास लाइब्रेरी का उपयोग नहीं कर रहा है? –

+0

पोर्टेबल क्लास लाइब्रेरी साझा गैर-यूआई कोड की समस्या का समाधान करते हैं, यदि वे एमवीवीएम का उपयोग करते हैं तो दृश्यमान मॉडल के लिए वे एक अच्छा फिट होना चाहिए, न कि दृश्य। –

उत्तर

0

केवल जेनेरिक उपयोगकर्ता नियंत्रण जो प्लेटफॉर्म पर सामान्य व्यवहार करते हैं उन्हें पीसीएल में रखा जा सकता है, हालांकि, सबसे अच्छा सुझाव प्रत्येक प्लेटफ़ॉर्म के लिए अलग-अलग xaml विचारों को रखेगा।

0

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

कुछ आम असंगतियां हैं:

  • नियंत्रण विभिन्न नामस्थान में दोनों प्लेटफार्मों में मौजूद - अपने स्वयं के संस्करण उपवर्ग और उस का संदर्भ लें।
  • शैलियों आदि प्लेटफार्मों के बीच अलग-अलग की आवश्यकता है - संसाधनों का एक सामान्य शब्दकोश, प्रति मंच अलग-अलग, और कुंजी द्वारा संदर्भ शामिल करें।
  • नियंत्रण काफी अलग हैं, या केवल 1 प्लेटफ़ॉर्म में मौजूद हैं - अपना स्वयं का रैपर नियंत्रण प्रस्तुत करें (जिसके लिए 'गायब' मामले में पर्याप्त कार्यान्वयन की आवश्यकता हो सकती है)।
  • मूल गुण या functonality गायब - अक्सर एक संलग्न व्यवहार के साथ कुछ हैक कर सकते हैं (उदाहरण के लिए आपके क्लिप्सToBounds उदाहरण here पाया जाता है)।
संबंधित मुद्दे