दिलचस्प पोस्ट
Std :: स्ट्रिंग के लिए एक इंट संलग्न करें लूप को तोड़ने के बिना, सरणी के माध्यम से लूपिंग और वस्तुओं को निकालना गतिविधि में वापस बटन को कैसे नियंत्रित करें क्या java.lang.String.intern () का उपयोग करना अच्छा है? एक स्ट्रिंग में दिए गए सबस्ट्रिंग की घटनाओं की संख्या की गणना करें समान सत्र साझा करने पर एक अन्य वेब एप्लिकेशन को संसाधित करते समय वेब ऐप अवरुद्ध पाठ फ़ाइल से पहली पंक्ति को पढ़ने के लिए विंडोज बैच कमांड अतुल्यकालिक कॉलबैक फ़ंक्शन के सेट के लिए मैं कैसे प्रतीक्षा कर सकता हूं? Matlab में एक वीडियो बनाने के लिए दृष्टिकोण सर्वर इंटरैक्शन के बिना CSV फ़ाइल में जावास्क्रिप्ट डेटा निर्यात करें शीर्ष बाएं कोने में बाधाएं लयआउट दृश्य सी # के साथ HTTP पोस्ट के माध्यम से एक फाइल भेजें MySQL विदेशी कुंजी त्रुटि 1005 त्रुटि 150 एसक्यूएल सम्मिलित: जहां खंड पर बनाम खंड नरम कीबोर्ड दिखाए जाने पर लेआउट्स को ले जाएं?

WPF में, एक्स: नाम और नाम के गुणों के बीच अंतर क्या हैं?

शीर्षक ही सब कुछ कह देता है। कभी-कभी ऐसा लगता है कि Name और x:Name विशेषताएँ विनिमेय हैं

तो, उनके बीच निश्चित मतभेद क्या हैं, और जब दूसरे के ऊपर एक का उपयोग करना बेहतर है?

क्या उन्हें गलत तरीके से उपयोग करने के लिए कोई प्रदर्शन या स्मृति प्रभाव हैं?

अब तक प्रतिक्रियाओं को संपादित करें कि x:Name का उपयोग करना x:Name सभी का x:Name हमेशा ठीक होता है, लेकिन मैं अभी भी जानना चाहता हूं कि अंतर क्या है माइक्रोसॉफ्ट इन दो विशेषताओं WPF के पहले रिलीज में डाल दिया, तो कुछ समझदार स्पष्टीकरण होना चाहिए।

वेब के समाधान से एकत्रित समाधान "WPF में, एक्स: नाम और नाम के गुणों के बीच अंतर क्या हैं?"

वास्तव में एक्सएएमएल में केवल एक ही नाम है, x:Name । एक ढांचा, जैसे कि WPF, वैकल्पिक रूप से अपनी संपत्तियों में से एक को RuntimeNamePropertyAttribute के x:Name नामित कर सकता है x:Name पर RuntimeNamePropertyAttribute का इस्तेमाल करके x:Name जो RuntimeNamePropertyAttribute मानचित्रण के रूप में वर्ग गुणों में से एक को RuntimeNamePropertyAttribute करता है: XAML का नाम विशेषता

इसका कारण यह था कि चौखटे के लिए अनुमति देने के लिए पहले से ही रनटाइम पर "नाम" की अवधारणा है, जैसे WPF WPF में, उदाहरण के लिए, FrameworkElement एक नाम संपत्ति का परिचय।

सामान्य तौर पर, एक वर्ग को x:Name के नाम को संग्रहीत करने की आवश्यकता नहीं होती है x:Name करने योग्य सभी x:Name एक्सएएमएल के लिए x:Name मतलब कक्षा के पीछे के कोड में मान को स्टोर करने के लिए एक फ़ील्ड तैयार करता है। उस मैपिंग के साथ रनटाइम क्या होता है फ्रेमवर्क निर्भर है

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

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

चाहे आप एक या दूसरे का उपयोग करना चाहिए वास्तव में एक शैली प्रश्न है, एक तकनीकी नहीं मैं इसे सिफारिश के लिए दूसरों को छोड़ दूँगा

ऑटोमेशनप्रॉपर्टीज़ भी देखें .नाम वी.एस. एक्स: नाम , स्वचालन प्रॉपर्टीज। नाम एक्सेस-योग्यता टूल और कुछ परीक्षण टूल द्वारा उपयोग किया जाता है।

ये एक ही चीज नहीं हैं।

x:Name एक xaml अवधारणा है, मुख्यतः संदर्भ तत्वों के लिए उपयोग किया जाता है। जब आप किसी तत्व को एक्स: नाम xaml विशेषता दें, "निर्दिष्ट x:Name एक क्षेत्र का x:Name बन जाता है जो अंतर्निहित कोड में बनाया जाता है जब xaml संसाधित होता है, और उस फ़ील्ड में ऑब्जेक्ट का कोई संदर्भ होता है।" ( एमएसडीएन ) तो, यह डिज़ाइनर-जनरेटेड फ़ील्ड है, जो कि डिफ़ॉल्ट रूप से आंतरिक पहुंच है

Name एक FrameworkElement एलेमेंट की मौजूदा स्ट्रिंग संपत्ति है, जो कि किसी अन्य डब्लूपीएफ तत्व की संपत्ति के रूप में सूचीबद्ध है xaml विशेषता के रूप में।

एक परिणाम के रूप में, इसका भी अर्थ है x:Name का उपयोग वस्तुओं की एक विस्तृत श्रृंखला पर किया जा सकता है। यह एक तकनीक है जिसे एक्सएम्एल में दिए गए नाम से संदर्भित किया जा सकता है।

x: नाम और नाम विभिन्न नामस्थानों को संदर्भित कर रहे हैं।

x: नाम x नाम स्थान के लिए एक संदर्भ है जिसे एक्सएमएल फ़ाइल के शीर्ष पर डिफ़ॉल्ट रूप से परिभाषित किया गया है।

 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

बस कह रहे नाम नीचे दिए गए नाम स्थान का डिफ़ॉल्ट उपयोग करता है

 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

x: नाम कह रहा है कि नाम स्थान का उपयोग एक्स एरिया के पास है एक्स डिफ़ॉल्ट है और अधिकांश लोग इसे छोड़ देते हैं लेकिन आप इसे आप जो भी पसंद करते हैं उसे बदल सकते हैं

 xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml" 

तो आपका संदर्भ foo होगा : नाम

WPF में नेमस्पेस को परिभाषित और प्रयोग करें

संपादित करें:

ठीक है, यह एक अलग तरीके से देखने देता है। कहें कि आप अपने Xaml पृष्ठ पर एक बटन खींचें और छोड़ें। आप इस 2 तरीकों को संदर्भित कर सकते हैं x: name and name सभी xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" और xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" कई नामस्थानों का संदर्भ है । चूंकि xaml नियंत्रण नाम स्थान (उस पर 100% नहीं) रखता है और प्रस्तुति में फ़्रेमवर्क एलेमेंट और बटन वर्ग का आस्तिय स्वरूप है:

 Button : ButtonBase ButtonBase : ContentControl, ICommandSource ContentControl : Control, IAddChild Control : FrameworkElement FrameworkElement : UIElement, IFrameworkInputElement, IInputElement, ISupportInitialize, IHaveResources 

इसलिए जैसा कि कोई भी अपेक्षा करता है कि फ्रेमवर्क एलेमेंट से मिलने वाले किसी भी चीज के पास उसके सभी सार्वजनिक विशेषताओं तक पहुंच होगी इसलिए बटन के मामले में यह फ़्रेमवर्क एलेमेंट से उसका नाम विशेषता प्राप्त कर रहा है, पदानुक्रम के पेड़ के शीर्ष पर। तो आप एक्स: नाम या नाम कह सकते हैं और वे दोनों फ्रेमवर्क एलेमेंट से प्राप्तकर्ता / सेटर तक पहुंच रहे होंगे।

एमएसडीएन संदर्भ

WPF एक सीएलआर विशेषता को परिभाषित करता है जो एक्सएलएम प्रोसेसर द्वारा उपभोग किया जाता है ताकि एकल सीएलआर नेमस्पेस को एक एक्सएमएल नेमस्पेस में मैप किया जा सके। XmlnsDefinitionAttribute विशेषता विधानसभा स्तर पर सोर्स कोड में रखी जाती है जो विधानसभा का उत्पादन करती है। WPF असेंबली स्रोत कोड, इस विशिष्टता को विभिन्न सामान्य नामस्थानों, जैसे कि सिस्टम। विन्डोज़ और सिस्टम। विन्डोज.कंट्रोल, को http://schemas.microsoft.com/winfx/2006/xaml/presentation नामस्थान पर मैप करने के लिए उपयोग करता है।

तो विधानसभा विशेषताओं की तरह कुछ दिखेगा:

PresentationFramework.dll – XmlnsDefinitionAttribute:

 [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")] 

वे दोनों एक ही चीज हैं, कई रूपरेखा तत्व स्वयं एक नाम संपत्ति का पर्दाफाश करते हैं, लेकिन उन लोगों के लिए जो आप एक्स का उपयोग नहीं कर सकते हैं: नाम – मैं आमतौर पर केवल एक्स: नाम के साथ रहना चाहता हूं क्योंकि यह सब कुछ के लिए काम करता है

यदि वे चाहते हैं कि नियंत्रण डीपी के रूप में अपने नाम को बेनकाब कर सकते हैं (क्योंकि उन्हें आंतरिक रूप से उस डीपी का उपयोग करना है), या वे नहीं चुन सकते हैं

यहां और यहां एमएसडीएन में अधिक जानकारी:

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

अगर नाम कक्षा पर एक संपत्ति के रूप में उपलब्ध है, तो नाम और एक्स: नाम का प्रयोग एक प्रकार की विशेषताओं के रूप में किया जा सकता है, लेकिन दोनों तत्व एक ही तत्व पर निर्दिष्ट किए जाने पर त्रुटि का परिणाम होगा।

एक्स: अगर आपके पास कस्टम नियंत्रण हैं तो नाम मेमोरी समस्याएं पैदा कर सकता है यह NameScope प्रविष्टि के लिए स्मृति स्थान रखेगा

मैं कहता हूं कि कभी भी एक्स का उपयोग न करें:

एकमात्र अंतर यह है कि यदि आप उपयोगकर्ता का उपयोग कर रहे हैं तो उसी विधानसभा से नियंत्रण में नियंत्रण करें तो नाम आपके नियंत्रण की पहचान नहीं करेगा और आपको "एक्सज़ का उपयोग करें: एक ही विधानसभा में नियंत्रण के लिए नाम" मिलेगा। तो x: नाम WPF में नामकरण नियंत्रणों का WPF संस्करण है। नाम का उपयोग केवल एक विंफ़ॉर्म लीगेसी के रूप में किया जाता है वे WPF और winforms में नियंत्रण के नाम अंतर करना चाहते थे क्योंकि वे Xaml में विशेषताओं का उपयोग करने के लिए अन्य विधानसभाओं से नियंत्रण का पता लगाने के लिए उन्होंने x: नियंत्रण के नाम के लिए उपयोग किया था।

बस इसे ध्यान में रखें कि इसे रखने के लिए सिर्फ एक नियंत्रण के लिए एक नाम न रखें क्योंकि यह रिक्त स्थान के रूप में स्मृति में रहता है और यह आपको एक चेतावनी देगा कि नाम को नियंत्रण के लिए लागू किया गया है, लेकिन इसकी कभी इस्तेमाल नहीं की गई है

नाम :

  1. केवल फ्रेमवर्क एलेमेंट और फ्रेमवर्क कंटेंट एलेमेंट के वंशज के लिए इस्तेमाल किया जा सकता है;
  2. कोड-पीछे से SetValue () और संपत्ति-जैसी के रूप में सेट किया जा सकता है

x: नाम :

  1. लगभग सभी एक्सएएमएल तत्वों के लिए इस्तेमाल किया जा सकता है;
  2. कोड-पीछे से SetValue () के द्वारा सेट नहीं किया जा सकता; यह ऑब्जेक्ट पर विशेषता सिंटैक्स का उपयोग करके केवल सेट किया जा सकता है क्योंकि यह एक निर्देश है

एक फ्रेमवर्क एलेमेंट या फ्रेमवर्क कंटेंट एलेमेंट के लिए एक्सएएमएल में दोनों निर्देशों का उपयोग करने से एक अपवाद होगा: अगर एक्सएएमएल मार्कअप संकलित है, तो अपवाद मार्कअप कंपाइल पर होगा, अन्यथा यह लोड पर होता है।

मैं हमेशा एक्स: नाम प्रकार का उपयोग करता हूं। मुझे कोई अंदाजा नहीं है कि यह किसी भी प्रदर्शन को प्रभावित करता है, तो मैं निम्नलिखित कारणों के लिए इसे आसान खोजता हूं। यदि आपके पास अपना उपयोगकर्ता नियंत्रण है जो किसी अन्य विधानसभा में रहते हैं तो केवल "नाम" संपत्ति हमेशा पर्याप्त नहीं होगी इससे सिर्फ एक्स को छूना आसान होता है: नाम संपत्ति

x:Name अर्थ है: इस ऑब्जेक्ट के संदर्भ को पकड़ने के लिए पीछे कोड में फ़ील्ड बनाएं।

Name अर्थ है: इस ऑब्जेक्ट की नाम की संपत्ति सेट करें

यह एक WPF आइटम नहीं है लेकिन एक मानक एक्सएमएल एक है और बीटीबीएच ने इसे ठीक से उत्तर दिया है, एक्स डिफ़ॉल्ट नेमस्पेस को संदर्भित करता है। एक्सएमएल में जब आप किसी एलीमेंट / एट्रिब्यूट को एक नेमस्पेस के साथ प्रीफ़िक्स नहीं देते हैं तो यह मानता है कि आप डिफ़ॉल्ट नेमस्पेस चाहते हैं। तो सिर्फ Name टाइप करना x:Name लिए एक छोटा हाथ से ज्यादा कुछ नहीं है x:Name । एक्सएमएल नामस्थानों पर अधिक जानकारी लिंक पाठ पर पाई जा सकती है

उत्तरों में से एक यह है कि x: नाम को अलग-अलग प्रोग्राम भाषाओं जैसे क # और नाम के रूप में इस्तेमाल किया जाना है, जिसका उपयोग फ्रेमवर्क के लिए किया जाना है। ईमानदारी से यही वह मेरे जैसा लगता है

निर्दिष्ट एक्स: नाम उस फ़ील्ड का नाम बन जाता है जो अंतर्निहित कोड में बनाया जाता है जब XAML संसाधित होता है, और वह फ़ील्ड ऑब्जेक्ट का संदर्भ रखता है। सिल्वरलाइट में, प्रबंधित एपीआई का उपयोग करते हुए, इस फ़ील्ड को बनाने की प्रक्रिया MSBuild लक्ष्य चरणों द्वारा की जाती है, जो XAML फ़ाइल के आंशिक कक्षाओं में शामिल होने और इसके कोड-पीछे के लिए भी जिम्मेदार है यह व्यवहार जरूरी नहीं कि XAML- भाषा निर्दिष्ट है; यह विशेष रूप से कार्यान्वयन है जो कि सीरियललाइट एक्स का उपयोग करने पर लागू होता है : इसके प्रोग्रामिंग और एप्लिकेशन मॉडल में नाम

एमएसडीएन पर और अधिक पढ़ें …

जब आप एक्सएएमएल में एक बटन तत्व घोषित करते हैं तो आप बटन को बुलाए जाने वाले विंडो रन टाइम में परिभाषित एक क्लास का संदर्भ दे रहे हैं।

बटन में कई विशेषता हैं जैसे कि पृष्ठभूमि, पाठ, मार्जिन, ….. और एक विशेषता जिसे नाम कहा जाता है।

अब जब आप एक्सएएमएल में एक बटन घोषित करते हैं तो एक गुमनाम वस्तु बनाने के समान है जो कि नाम के एक गुण हैं।

सामान्य तौर पर आप किसी गुमनाम ऑब्जेक्ट का उल्लेख नहीं कर सकते, लेकिन डब्लूपीएफ फ्रेमवर्क एक्सएएमएल प्रोसेसर में आपको उस ऑब्जेक्ट को नाम विशेषता के लिए जो भी मान दिया गया है, उसका संदर्भ देने में सक्षम बनाता है।

अब तक सब ठीक है।

किसी ऑब्जेक्ट को बनाने का दूसरा तरीका बेनामी ऑब्जेक्ट के बजाय एक नामित ऑब्जेक्ट बना रहा है। इस मामले में एक्सएएमएल नाम स्थान में एक वस्तु नाम के लिए एक विशेषता है (और क्योंकि यह XAML नाम स्थान में है, इसलिए एक्स है) कि आप सेट कर सकते हैं ताकि आप अपने ऑब्जेक्ट को पहचान सकें और इसका संदर्भ लें।

निष्कर्ष:

नाम किसी विशिष्ट ऑब्जेक्ट का एक विशेषता है, लेकिन एक्स: नाम उस ऑब्जेक्ट का एक विशेषता है (एक ऐसा वर्ग है जो सामान्य ऑब्जेक्ट को परिभाषित करता है)।