ইনিশিয়াল কম্পোনেন্ট () কী করে এবং ডাব্লুপিএফ এ কীভাবে কাজ করে?


166

কী করে InitializeComponent()এবং ডাব্লুপিএফ এ কীভাবে কাজ করে?

প্রথমে সাধারণভাবে, তবে আমি বিশেষত নির্মাণের ক্রমগুলির বিশদ বিবরণ এবং সংযুক্তিযুক্ত সম্পত্তি থাকা অবস্থায় কী ঘটে তা জানতে আগ্রহী।


2
ধন্যবাদ, আমি মনে করি নীচে এগুলি বেশ ভাল উত্তর! কেউ অ্যাটাচডপ্রপার্টির কথা হুবহু উল্লেখ করেনি, তবে এখন আমি জানি যে Xaml এ যে কোনও সংযুক্তি প্রপার্টি স্রেফ Xaml পার্সিংয়ের অংশ হিসাবে তৈরি হয়েছিল, তাই তারা সত্যই কোনও বিশেষ উল্লেখের যোগ্য নয়।
টিম লাভল-স্মিথ

উত্তর:


157

কলটি InitializeComponent()(যা সাধারণত কমপক্ষে Windowএবং এর ডিফল্ট নির্মাত্রে ডাকা হয় UserControl) আসলে নিয়ন্ত্রণের আংশিক শ্রেণীর কাছে একটি পদ্ধতি কল (যা আমি প্রত্যাশার সাথে অবজেক্টের স্তরক্রমের চেয়ে কল করেছিলাম)।

এই পদ্ধতিটি লোড হচ্ছে Window/ এর জন্য XAML এ একটি ইউআরআই সনাক্ত UserControlকরে এবং এটি System.Windows.Application.LoadComponent()স্ট্যাটিক পদ্ধতিতে প্রেরণ করে । LoadComponent()ইউআরআই-তে পাস হওয়া XAML ফাইলটি লোড করে এবং এটি এক্সএএমএল ফাইলের মূল উপাদান দ্বারা নির্দিষ্ট হওয়া অবজেক্টের একটি পরিস্থিতিতে রূপান্তরিত করে।

আরও বিশদে, এর LoadComponentউদাহরণ তৈরি করে XamlParserএবং এক্সএএমএল এর একটি গাছ তৈরি করে। প্রতিটি নোড দ্বারা পার্স করা হয় XamlParser.ProcessXamlNode()। এটি BamlRecordWriterক্লাসে পাস হয় । এর কিছু সময় পরে আমি কীভাবে বিএএমএলকে বস্তুতে রূপান্তরিত করব তাতে কিছুটা হারিয়ে যেতে পারি তবে এটি আপনাকে আলোকিত করার পথে সহায়তা করার জন্য যথেষ্ট হতে পারে।

দ্রষ্টব্য: মজার বিষয় হল, এটি ইন্টারফেসের InitializeComponentএকটি পদ্ধতি System.Windows.Markup.IComponentConnector, যার Window/ UserControlআংশিক উত্পাদিত শ্রেণিতে প্রয়োগ করা।

আশাকরি এটা সাহায্য করবে!


@ ব্র্যাড, আপনি কীভাবে খুঁজে পেলেন যে কোন ইন্টারফেস প্রারম্ভকালীন কম্পোনেন্টটি সংজ্ঞায়িত হয়েছে? .Xaml.cs ফাইলে কলটিতে এফ 1 সহায়তা .g.cs বা .gics ফাইলে থাকাকালীন Microsoft.SPOT.Emulator.EmulatorComp घटक শ্রেণীর দিকে পরিচালিত করে "পৃষ্ঠাটি পাওয়া যায়নি" বাড়ে। আমি ডব্লিউপিএফ-এ নতুন। এই পদ্ধতিটি কি নির্মাণের সময় উত্পন্ন হয়?
Vimes

@ АртёмЦарионов কনস্ট্রাক্টর ইনডিউনালাইজ কম্পোনেন্টে কল না করে, নিয়ন্ত্রণটি যে এক্সএএমএল অবস্থিত সেখানে এটি প্রদর্শিত বা ব্যবহারযোগ্য হবে না।
জেসন

মজাদার. আমি এই ধারণার মধ্যে ছিলাম যে জ্যামলটি কেবলমাত্র সংকলনের সময় ব্যবহৃত হয়েছিল .. রানটাইমের সময় জ্যামালটি পাওয়া কী লাভ এবং এটি কোথায় সঞ্চিত?
জেস্পার ম্যাথিজেন

কিছু পদ্ধতি আমাকে কেন দেয় "অবজেক্টের রেফারেন্স কোনও জিনিসের উদাহরণে সেট করা হয় না।" ?
পিটার গ্রুপ্পেলার

26

কোডটি সন্ধান করা সর্বদা সহায়তা করে। এটি হ'ল, আপনি নিম্নলিখিতটি তৈরির মাধ্যমে উত্পন্ন আংশিক শ্রেণীর (যা লোডকম্পোনেন্টকে কল করে ) একবার দেখে নিতে পারেন :

  1. আপনার আগ্রহী ভিজ্যুয়াল স্টুডিও সমাধানের সলিউশন এক্সপ্লোরার ফলকে যান।
  2. সলিউশন এক্সপ্লোরারের টুল বারে 'সমস্ত ফাইল দেখান' শিরোনামে একটি বোতাম রয়েছে। সেই বোতামটি টগল করুন।
  3. এখন, অবজেক্ট ফোল্ডারটি প্রসারিত করুন এবং তারপরে ডিবাগ বা রিলিজ ফোল্ডার (বা আপনি যে কোনও কনফিগারেশন নির্মাণ করছেন) এবং আপনি আপনার ক্লাস .g.cs শীর্ষক একটি ফাইল দেখতে পাবেন।

The YourClass .g.cs ... হ'ল আংশিক শ্রেণীর উত্পন্ন কোড। আবার, আপনি যদি এটি খুলেন তবে আপনি সূচনা করতে পারেন উপাদানটি পদ্ধতি এবং এটি কীভাবে লোডকম্পোনেন্টকে কল করে ... এবং আরও অনেক কিছু।


12
নোট করুন যে আপনি কন্সট্রাক্টরের মেথড কলটিতে ডান ক্লিক করে এবং "সংজ্ঞাতে যান" নির্বাচন করে এক ধাপে এটি করতে পারেন।
ব্র্যাড লিচ

2
আহ, এটা ঠিক ... ভুলে গেছি। অনেক সহজ উপায়। ভাল, কমপক্ষে আপনি জানেন কীভাবে এটি প্রকল্পের অন্তর্ভুক্ত রয়েছে। গ্রিন।
cplotts

1
@ ব্র্যাড লিচ, এই পার্টির দেরীতে, আপনি এফ 12 দিয়ে এটি করতে পারেন
জুলিয়াস দেপুল্লা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.