শিরোনাম এটি সব বলছে। কখনও কখনও মনে হয় Nameএবং x:Nameবৈশিষ্ট্যগুলি বিনিময়যোগ্য।
সুতরাং, তাদের মধ্যে সুনির্দিষ্ট পার্থক্যগুলি কী এবং যখন একে অপরের উপরে ব্যবহার করা ভাল?
এগুলি ভুল উপায়ে ব্যবহার করার জন্য কোনও কার্য সম্পাদন বা স্মৃতিশক্তি রয়েছে?
শিরোনাম এটি সব বলছে। কখনও কখনও মনে হয় Nameএবং x:Nameবৈশিষ্ট্যগুলি বিনিময়যোগ্য।
সুতরাং, তাদের মধ্যে সুনির্দিষ্ট পার্থক্যগুলি কী এবং যখন একে অপরের উপরে ব্যবহার করা ভাল?
এগুলি ভুল উপায়ে ব্যবহার করার জন্য কোনও কার্য সম্পাদন বা স্মৃতিশক্তি রয়েছে?
উত্তর:
সত্যিই, XAML একমাত্র নাম x:Name। ডাব্লুপিএফ এর মতো একটি কাঠামো এক্সএএমএল এর এক্স বৈশিষ্ট্য: এক্স বৈশিষ্ট্যের সাথে ম্যাপিংয়ের জন্য শ্রেণীর বৈশিষ্ট্যগুলির মধ্যে একটি নির্ধারণ করে যা ক্লাস অন x:Nameব্যবহার করে XAML এর কাছে তার বৈশিষ্ট্যগুলির RuntimeNamePropertyAttributeএকটিতে মানচিত্র তৈরি করতে পারে।
এটি করার কারণটি হ'ল ফ্রেমওয়ার্কগুলির জন্য অনুমতি দেওয়া ছিল যা ডাব্লুপিএফের মতো রানটাইমটিতে ইতিমধ্যে "নাম" ধারণা রয়েছে। উদাহরণস্বরূপ, ডাব্লুপিএফ FrameworkElementএকটি নাম সম্পত্তি পরিচয় করিয়ে দেয়।
সাধারণভাবে, কোনও শ্রেণীর নাম ব্যবহারের x:Nameযোগ্য হওয়ার জন্য সংরক্ষণ করার প্রয়োজন হয় না । x:Nameএক্সএএমএল-এর সমস্ত মাধ্যমটি ক্লাসের পিছনে কোডে মান সঞ্চয় করার জন্য একটি ক্ষেত্র তৈরি করে। রানটাইম যে ম্যাপিংয়ের সাহায্য করে তা ফ্রেমওয়ার্ক নির্ভর।
সুতরাং, কেন একই জিনিসটি করার দুটি উপায় আছে? এর সহজ উত্তর হ'ল কারণ একটি সম্পত্তিতে দুটি ধারণা ম্যাপ করা আছে। ডাব্লুপিএফ রানটাইমের সময় সংরক্ষিত কোনও উপাদানটির নাম চায় (যা অন্যান্য জিনিসের মধ্যে বাইন্ডের মাধ্যমে ব্যবহারযোগ্য) এবং এক্সএএমএলকে ক্লাসের পিছনের কোডটিতে ক্ষেত্রগুলি দ্বারা অ্যাক্সেসযোগ্য হতে চান এমন উপাদানগুলি জানতে হবে। ডাব্লুপিএফ x: নামের একটি উপন্যাস হিসাবে নামের সম্পত্তি চিহ্নিত করে এই দুটিকে একসাথে বেঁধেছে।
ভবিষ্যতে, এক্সএএমএল এর x: নামের আরও ব্যবহার থাকবে যেমন যেমন নাম অনুসারে অন্যান্য বস্তুর উল্লেখ করে আপনাকে সম্পত্তি সেট করার অনুমতি দেয় তবে 3.5 এবং এর পূর্বে এটি কেবল ক্ষেত্র তৈরি করতে ব্যবহৃত হয়।
আপনার একটি বা অন্যটি ব্যবহার করা উচিত কিনা তা আসলেই একটি শৈলীর প্রশ্ন, কোনও প্রযুক্তিগত নয়। আমি এটি অন্যের কাছে একটি সুপারিশের জন্য রেখে দেব।
অটোমেশনপ্রোপার্টিগুলিও দেখুন N নাম ভিএস এক্স: নাম , অটোমেশনপ্রোপার্টি.নাম অ্যাক্সেসিবিলিটি সরঞ্জাম এবং কিছু পরীক্ষার সরঞ্জাম দ্বারা ব্যবহৃত হয়।
x:Nameকারণ Nameকোড-পিছনে স্বীকৃতি পাওয়ার জন্য কোনও ক্ষেত্র তৈরি করবে না। যদিও এখনও হয় না কেন আমি জানি না।
Nameসম্পত্তি থাকে তবে তারা একই জিনিস বোঝায়। যদি উপাদানটির কোনও Nameসম্পত্তি না থাকে তবে আপনাকে অবশ্যই ব্যবহার করতে হবে x:Name।
এগুলো এক জিনিস না.
x:Nameএকটি এক্সএএমএল ধারণা, মূলত উপাদানগুলির রেফারেন্স হিসাবে ব্যবহৃত হয়। আপনি যখন কোনও উপাদানকে x: নাম xaml অ্যাট্রিবিউট দেন, "নির্দিষ্ট করা x:Nameক্ষেত্রের নাম হয়ে যায় যা xaml প্রসেস করার সময় অন্তর্নিহিত কোডে তৈরি হয় এবং সেই ক্ষেত্রটি অবজেক্টের রেফারেন্স ধারণ করে।" ( এমএসডিএন ) সুতরাং এটি একটি ডিজাইনার-উত্পাদিত ক্ষেত্র, এটির ডিফল্টরূপে অভ্যন্তরীণ অ্যাক্সেস রয়েছে।
NameFrameworkElementএক্স এর বিদ্যমান স্ট্রিং প্রপার্টি, কোনও এক্সএএমএল অ্যাট্রিবিউট আকারে অন্য wpf উপাদান বৈশিষ্ট্য হিসাবে তালিকাভুক্ত।
ফলস্বরূপ, এর অর্থ হ'ল x:Nameবিস্তৃত অবজেক্টগুলিতে ব্যবহার করা যেতে পারে। এটি xaml এর যে কোনও কিছুকে প্রদত্ত নামের সাথে রেফারেন্স করতে সক্ষম করার একটি কৌশল।
x: নাম এবং নাম পৃথক নেমস্পেসগুলি উল্লেখ করছে।
x: নামটি Xaml ফাইলের শীর্ষে ডিফল্ট দ্বারা নির্ধারিত x নেমস্পেসের একটি উল্লেখ।
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
কেবল নামটি নীচের ডিফল্টরূপে নেমস্পেস ব্যবহার করে saying
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
X: নাম ব্যবহার বলছে নামস্থান আছে এক্স ওরফে। এক্স হ'ল ডিফল্ট এবং বেশিরভাগ লোকেরা এটি ছেড়ে দেয় তবে আপনি যা পছন্দ করেন তা পরিবর্তন করতে পারেন
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
আপনার রেফারেন্স foo হবে: নাম
ডাব্লুপিএফ-এ नेमস্পেসগুলি সংজ্ঞায়িত করুন এবং ব্যবহার করুন
ঠিক আছে এটি অন্যভাবে দেখুন। বলুন যে আপনি আপনার Xaml পৃষ্ঠাতে একটি বোতাম টেনে আনুন এবং ছেড়ে দিন। আপনি এই 2 টি উপায় উল্লেখ করতে পারেন x: নাম এবং নাম । সমস্ত xMLns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" এবং xMLns: x = "http://schemas.microsoft.com/winfx/2006/xaml" একাধিক নেমস্পেসের উল্লেখ । যেহেতু xaml ঝুলিতে কন্ট্রোল নামস্থান (যে না 100%) এবং উপস্থাপনা ঝুলিতে FrameworkElement এবং বাটন বর্গ একটি উত্তরাধিকার প্যাটার্ন আছে:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
সুতরাং যেহেতু ফ্রেমওয়ার্ক এলিমেন্ট থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এমন কিছু প্রত্যাশার সাথে এর সমস্ত সর্বজনীন বৈশিষ্ট্যে অ্যাক্সেস থাকবে। সুতরাং বাটনের ক্ষেত্রে এটি ফ্রেমওয়ার্ক এলিমেন্ট থেকে হায়ারার্কি গাছের একেবারে শীর্ষে তার নাম বৈশিষ্ট্যটি পাচ্ছে। সুতরাং আপনি x: নাম বা নাম বলতে পারেন এবং তারা উভয়ই ফ্রেমওয়ার্কএলমেন্ট থেকে প্রাপ্তকারী / সেটটার অ্যাক্সেস করবে।
ডাব্লুপিএফ একটি সিএলআর অ্যাট্রিবিউট সংজ্ঞায়িত করে যা এক্সএএমএল প্রসেসর দ্বারা গ্রাস করা হয় যা একক এক্সএমএল নেমস্পেসে একাধিক সিএলআর নেমস্পেসগুলি ম্যাপ করতে পারে AM XmlnsDefinitionAttribute অ্যাট্রিবিউট সোর্স কোড যে সমাবেশ উৎপন্ন মধ্যে সমাবেশ পর্যায়ে স্থাপন করা হয়। ডাব্লুপিএফ অ্যাসেম্বলি উত্স কোডটি এই বৈশিষ্ট্যটি বিভিন্ন সাধারণ নেমস্পেসগুলি যেমন সিস্টেম. উইন্ডো এবং সিস্টেম. উইন্ডোস.কন্ট্রোলগুলিতে, http://schemas.microsoft.com/winfx/2006/xaml/presenation নেমস্পেসে ম্যাপ করার জন্য ব্যবহার করে।
সুতরাং অ্যাসেম্বলির বৈশিষ্ট্যগুলি এমন কিছু দেখবে:
উপস্থাপনা ফ্রেমওয়ার্ক.ডিল - এক্সএমএনএলস ডেফিনিশনঅ্যাট্রিবিউট:
[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")]
http://schemas.microsoft.com/winfx/2006/xamlঝুলিতে Control: যেহেতু আপনি একটি 'X নামস্থান ছাড়া XAML সরাসরি এটি ব্যবহার করতে পারেন<Control />
এগুলি উভয়ই একই জিনিস, কাঠামোগত উপাদানগুলি একটি নাম সম্পত্তি নিজেরাই প্রকাশ করে, তবে আপনি x: নাম ব্যবহার করতে পারবেন না তাদের ক্ষেত্রে - আমি সাধারণত x: নামের সাথে আটকে থাকি কারণ এটি সমস্ত কিছুর জন্য কাজ করে।
নিয়ন্ত্রণগুলি তারা চাইলে একটি নির্ভরতা সম্পত্তি হিসাবে তাদের নাম প্রকাশ করতে পারে (কারণ তাদের অভ্যন্তরীণভাবে সেই নির্ভরতা সম্পত্তিটি ব্যবহার করা দরকার), বা তারা তা না বেছে নিতে পারে।
এমএসডিএন-তে আরও বিশদ এখানে এবং এখানে :
কিছু ডাব্লুপিএফ ফ্রেমওয়ার্ক-স্তরের অ্যাপ্লিকেশনগুলি x এর কোনও ব্যবহার এড়াতে সক্ষম হতে পারে: নাম বৈশিষ্ট্য, কারণ ফ্রেমওয়ার্কএলমেন্ট / ফ্রেমওয়ার্কসন্টেন্টিমেন্টের মতো কয়েকটি গুরুত্বপূর্ণ বেস শ্রেণীর জন্য ডাব্লুপিএফ নেমস্পেসের মধ্যে উল্লিখিত নাম নির্ভরতা সম্পত্তি এই একই উদ্দেশ্যে সন্তুষ্ট করে। এখনও কিছু সাধারণ এক্সএএমএল এবং কাঠামোর দৃশ্যাবলী রয়েছে যেখানে কোনও নামের সম্পত্তি নেই এমন একটি উপাদানটিতে কোড অ্যাক্সেস প্রয়োজনীয়, বিশেষত নির্দিষ্ট অ্যানিমেশন এবং স্টোরিবোর্ড সমর্থন শ্রেণিতে। উদাহরণস্বরূপ, আপনার কোড থেকে রেফারেন্স করতে ইচ্ছুক হলে আপনাকে এক্স: এক্সএএমএল-তে তৈরি টাইমলাইন এবং রূপান্তরগুলির নাম উল্লেখ করতে হবে।
ক্লাসে নাম হিসাবে সম্পত্তি হিসাবে উপলভ্য থাকলে নাম এবং এক্স: নামটি আলাদা আলাদাভাবে বৈশিষ্ট্য হিসাবে ব্যবহার করা যেতে পারে, তবে উভয়টি একই উপাদানটিতে নির্দিষ্ট করা থাকলে একটি ত্রুটি ঘটবে।
এক্স: আপনার যদি কাস্টম নিয়ন্ত্রণ থাকে তবে নাম মেমরির সমস্যার কারণ হতে পারে। এটি নেমস্কোপ প্রবেশের জন্য একটি স্মৃতি অবস্থান রাখবে।
আমি বলি কখনই x ব্যবহার করবেন না: নাম না রাখলে আপনার দরকার নেই।
FrameworkElement.RegisterName("elementname")। তবে, আপনি যদি কল করেন তবে FrameworkElement.UnregisterName("elementname")এটি "dereferencesd" হতে পারে।
নাম :
এক্স: নাম :
এক্সএএমএলএল উভয় নির্দেশকে একটি ফ্রেমওয়ার্ক এলিমেন্ট বা ফ্রেমওয়ার্ক কনটেন্টেলমেন্ট ব্যবহার করার ফলে একটি ব্যতিক্রম ঘটতে পারে: এক্সএএমএল যদি মার্কআপ সংকলিত হয় তবে ব্যতিক্রমটি মার্কআপ সংকলনে উপস্থিত হবে, অন্যথায় এটি লোডে ঘটে।
পার্থক্যটি হ'ল যদি আপনি একই নিয়ন্ত্রণকারীর মধ্যে নিয়ন্ত্রণ ব্যবহারকারীর নিয়ন্ত্রণ ব্যবহার করেন তবে নামটি আপনার নিয়ন্ত্রণ চিহ্নিত করবে না এবং আপনি "একই সমাবেশে নিয়ন্ত্রণের জন্য x: নাম ব্যবহার করুন" একটি ত্রুটি পাবেন। সুতরাং x: নামটি ডাব্লুপিএফ-র নামকরণের নিয়ন্ত্রণের ডাব্লুপিএফ সংস্করণ। নামটি একটি উইনফর্ম উত্তরাধিকার হিসাবে সবেমাত্র ব্যবহৃত হয়। তারা ডাব্লুপিএফ এবং উইনফর্মগুলিতে নিয়ন্ত্রণের নামকরণের পার্থক্য করতে চেয়েছিল কারণ তারা Xaml এ অ্যাট্রিবিউটগুলি ব্যবহার করে অন্যান্য অ্যাসেমব্লিগুলি থেকে নিয়ন্ত্রণগুলি সনাক্ত করতে: x নাম নিয়ন্ত্রণের জন্য।
কেবল মনে রাখবেন যে এটি নিয়ন্ত্রণের জন্য কোনও নাম রাখার প্রয়োজন নেই কারণ এটি শূন্য হিসাবে স্মৃতিতে থাকে এবং এটি আপনাকে একটি সতর্কতা দেয় যে নামটি কখনও ব্যবহার না করা নিয়ন্ত্রণের জন্য প্রয়োগ করা হয়েছে।
x:Name মানে: এই অবজেক্টের রেফারেন্স ধরে রাখতে কোডের পিছনে একটি ক্ষেত্র তৈরি করুন।
Name অর্থ: এই বস্তুর নাম বৈশিষ্ট্য সেট করুন।
আমি সর্বদা এক্স: নাম বৈকল্পিক ব্যবহার করি। এটি কোনও কার্য সম্পাদনকে প্রভাবিত করে কিনা আমার কোনও ধারণা নেই, আমি নিম্নলিখিত কারণে এটি আরও সহজ। যদি আপনার নিজস্ব ব্যবহারকারী নিয়ন্ত্রণ রয়েছে যা অন্য সমাবেশে থাকে কেবলমাত্র "নাম" বৈশিষ্ট্যটি সর্বদা যথেষ্ট হবে না। এটি কেবল x: নামের সম্পত্তিকে আটকে রাখা সহজ করে তোলে।
এটি কোনও ডাব্লুপিএফ আইটেম নয় বরং একটি স্ট্যান্ডার্ড এক্সএমএল এবং বিটিবিএইচ এর সঠিক উত্তর দিয়েছে, এক্সটি ডিফল্ট নেমস্পেসকে বোঝায়। এক্সএমএলে আপনি যখন কোনও নাম / স্থানের সাথে কোনও উপাদান / গুণকে উপসর্গ করেন না তখন ধরে নেওয়া হয় যে আপনি ডিফল্ট নেমস্পেস চান want সুতরাং শুধু টাইপ Nameকরা সংক্ষিপ্ত হাত ছাড়া আর কিছু নয় x:Name। এক্সএমএল নেমস্পেসে আরও বিশদ বিবরণ লিঙ্ক পাঠ্যে পাওয়া যাবে
উত্তরগুলির মধ্যে একটি হ'ল x: নামটি বিভিন্ন প্রোগ্রামের ভাষার মধ্যে যেমন সি # এবং নাম কাঠামোর জন্য ব্যবহার করতে হয় used সত্যিই এটি আমার কাছে মনে হচ্ছে।
নির্দিষ্ট এক্স: নামটি ক্ষেত্রের নাম হয়ে যায় যা অন্তর্নিহিত কোডটিতে তৈরি করা হয় যখন এক্সএএমএল প্রক্রিয়া করা হয়, এবং সেই ক্ষেত্রটি অবজেক্টের একটি রেফারেন্স ধারণ করে। সিলভারলাইটে, পরিচালিত এপিআই ব্যবহার করে, এই ক্ষেত্রটি তৈরির প্রক্রিয়াটি এমএসবিল্ড টার্গেট পদক্ষেপগুলি দ্বারা সঞ্চালিত হয়, যা এক্সএএমএল ফাইল এবং এর কোড-পিছনের জন্য আংশিক শ্রেণিতে যোগদানের জন্যও দায়ী। এই আচরণটি XAML- ভাষা নির্দিষ্টভাবে উল্লেখ করা হয় না; সিলভারলাইট x: নামটি এর প্রোগ্রামিং এবং অ্যাপ্লিকেশন মডেলগুলিতে ব্যবহার করার জন্য প্রয়োগ করে এটি নির্দিষ্ট প্রয়োগ ।
আপনি যখন এক্সএএমএল-তে একটি বাটন উপাদান ঘোষণা করেন আপনি উইন্ডোজ রান টাইমে সংজ্ঞায়িত একটি শ্রেণীর উল্লেখ করছেন যা বাটন বলে।
বাটনের অনেকগুলি বৈশিষ্ট্য রয়েছে যেমন ব্যাকগ্রাউন্ড, পাঠ্য, মার্জিন, ..... এবং নাম নামে একটি বৈশিষ্ট্য।
এখন আপনি যখন এক্সএএমএল-তে একটি বাটন ঘোষণা করবেন তখন একটি বেনামি বস্তু তৈরির মতো যা নাম নামে একটি বৈশিষ্ট্যযুক্ত হয়েছিল।
সাধারণভাবে আপনি কোনও বেনামে থাকা অবজেক্টকে উল্লেখ করতে পারবেন না, তবে ডাব্লুপিএফ ফ্রেমওয়ার্কে এক্সএএমএল প্রসেসর আপনাকে নাম অ্যাট্রিবিউটকে যে মান দিয়েছিল তার দ্বারা সেই অবজেক্টটি উল্লেখ করতে সক্ষম করে।
এ পর্যন্ত সব ঠিকই.
অবজেক্ট তৈরির অন্য উপায় হ'ল বেনামে অবজেক্টের পরিবর্তে একটি নামকৃত বস্তু তৈরি করা। এক্ষেত্রে এক্সএএমএল নেমস্পেসের নাম নামক কোনও বস্তুর জন্য একটি বৈশিষ্ট্য রয়েছে (এবং এটি যেহেতু এটি এক্সএএমএল নামের জায়গার মধ্যে রয়েছে তাই এক্স :) রয়েছে যা আপনি সেট করতে পারেন যাতে আপনি নিজের অবজেক্টটি সনাক্ত করতে পারেন এবং এটি উল্লেখ করতে পারেন।
উপসংহার:
নাম একটি নির্দিষ্ট বস্তুর বৈশিষ্ট্য, তবে এক্স: নামটি সেই বস্তুর একটি বৈশিষ্ট্য (এখানে একটি শ্রেণি রয়েছে যা একটি সাধারণ বস্তুকে সংজ্ঞায়িত করে)।
আমার গবেষণা x:Nameযেমন বিশ্বব্যাপী পরিবর্তনশীল। তবে স্থানীয় পরিবর্তনশীল Nameহিসাবে । এর অর্থ কি x: নাম আপনি এটি আপনার এক্সএএমএল ফাইলের যে কোনও জায়গায় কল করতে পারেন তবে নামটি নেই।
উদাহরণ:
<StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />
<Button Content="Example" Name="btn" />
</StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />
তুমি পারবে না Bindingসম্পত্তি Contentএর Buttonনাম দিয়ে কারণ এটি বাহিরে "btn" হয়StackPanel
x:Nameসমস্ত সময় ব্যবহার করা ভাল কাজ করে। আমাকে কেবল এটিকে পরিবর্তন করতে হবেNameঅন্যথায় আমি আমার .xaml.cs কোডের নিয়ন্ত্রণটি উল্লেখ করতে পারি না তাই আমি ধরে নিতে চলেছি যে এটি এখন আর সবসময় ঠিকঠাক কাজ করে না।