উত্তর:
ContentControl
নিয়ন্ত্রণের জন্য একটি বেস শ্রেণি যা অন্যান্য উপাদানগুলি ধারণ করে এবং একটি- Content
প্রপার্টি রয়েছে (উদাহরণস্বরূপ Button
)।
ContentPresenter
সামগ্রী প্রদর্শন করতে নিয়ন্ত্রণ টেম্পলেটগুলির অভ্যন্তরে ব্যবহৃত হয়।
ContentControl
, যখন সরাসরি ব্যবহার করা হয় (এটি বেস শ্রেণি হিসাবে ব্যবহৃত হবে বলে মনে করা হয়), এর একটি নিয়ন্ত্রণ টেম্পলেট থাকে যা এর বিষয়বস্তু প্রদর্শন করতে ContentPresenter ব্যবহার করে।
আমার নিয়মের থাম্ব (প্রতিটি ক্ষেত্রে প্রযোজ্য নয়, আপনার রায় ব্যবহার করুন):
ControlTemplate
ব্যবহারContentPresenter
ControlTemplate
( DataTemplate
টেমপ্লেট সহ এবং বাইরে) এগুলির কোনও ব্যবহার না করার চেষ্টা করুন, আপনার যদি প্রয়োজন হয় তবে আপনাকে অবশ্যই পছন্দ করতে হবেContentPresenter
ContentControl
যদি আপনি সেই হোস্ট সামগ্রীতে একটি কাস্টম "বর্ণহীন" নিয়ন্ত্রণ তৈরি করে থাকেন এবং কোনও বিদ্যমান নিয়ন্ত্রণের টেম্পলেট পরিবর্তন করে আপনি একই ফলাফল পেতে পারেন না (এটি অত্যন্ত বিরল হওয়া উচিত)।"প্রকৃত সামগ্রী এখানে রাখুন" বলার জন্য প্লেসহোল্ডার হিসাবে কন্টেন্টপ্রেসেন্টার সাধারণত কন্ট্রোলটেম্পলেটটিতে ব্যবহৃত হয়।
কোনও বিষয়বস্তু নিয়ন্ত্রণটি যে কোনও জায়গায় ব্যবহার করা যেতে পারে, অগত্যা কোনও টেমপ্লেটে নয়। এটি এতে নির্ধারিত সামগ্রীর ধরণের জন্য নির্ধারিত যেকোন ডেটা টেম্পলেটটিকে বেছে নেবে
আমি সম্প্রতি এই দুটি নিয়ন্ত্রণ সম্পর্কে আমার ব্লগে একটি পোস্ট লিখেছি:
ContentPresenter বনাম ContentControl (সম্পাদনা: ভাঙা লিঙ্ক সংরক্ষণাগারিত সংস্করণ দিয়ে প্রতিস্থাপিত হয়েছে।)
ContentPresenter.ContentSource আসলে দুটি ক্লাস মধ্যে সবচেয়ে বড় পার্থক্য করে তোলে। কন্টেন্টসোর্স সম্পত্তিটি কেবল একটি কন্ট্রোল টেম্প্লেটের মধ্যেই বোঝায়; এটি নির্ধারণ করে যে টেম্প্লেটেড প্যারেন্ট সম্পত্তির সাথে সামগ্রীটি ম্যাপ করা উচিত। উদাহরণস্বরূপ, যদি কোনও নিয়ন্ত্রণে নির্ভরশীল সম্পত্তি থাকে MyProperty1
তবে আমরা এর মধ্যে নিম্নলিখিতটি পেতে পারি ControlTemplate
:
<ControlTemplate TargetType="MyControl" >
[...]
<ContentPresenter ContentSource="MyProperty1" />
[...]
</ControlTemplate>
কনটেন্টপ্রেসেন্টারের সামগ্রীটি এর মান পাবে MyProperty1
।
দয়া করে মনে রাখবেন যে সম্পত্তিটির নামটি যদি হয় তবে এটির ডিফল্ট মান হিসাবে Content
নির্দিষ্ট করার দরকার নেই ContentSource
।
যারা কৌণিক জে জানেন তাদের জন্য: এটি প্রতিরক্ষা মেকানিজমের অনুরূপ।
এটি একটি পুরানো প্রশ্ন তবে আমি সবেমাত্র একটি অ্যানিমেটেড টাইল কন্ট্রোল তৈরির কাজ শেষ করছিলাম, সর্বজনীন অ্যাপ্লিকেশনটির জন্য তৈরি টেমপ্লেটটি, পুরানো ফোন ডাব্লুপি 7/8 এসডিকে থেকে এই কোডটি দেখুন:
<ContentControl x:Name="contentControl" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch">
<ContentPresenter x:Name="contentPresenter" CacheMode="BitmapCache"/>
</ContentControl>
এখানে আপনি দেখতে পাচ্ছেন কনটেন্টকন্ট্রোলটি সামগ্রী প্রদর্শন করার জন্য ধারক এবং উপস্থাপক। বেশিরভাগ ক্ষেত্রে কন্ট্রোলটাইপলেটটি কনটেইনার হবে তবে আপনি যদি ControlTemplate
অন্য একটি ধারক করতে চান তবে আপনি একটি অতিরিক্ত ধারক রাখতে পারেন: ContentControl
এতে এবং সামগ্রীটি আলাদাভাবে উপস্থাপনের জন্য ContentPresenter
। আপনার যদি পৃথক ধারক প্রয়োজন না হয় তবে কেবল ControlTemplate
এবং ব্যবহার করুনControlPresenters
কন্টেন্ট ব্লক প্রদর্শনের জন্য কমপক্ষে মাইক্রোসফ্টে ছেলেরা যখন ডাব্লুপি 7/8 এসডিকে তৈরি করেছিল তখন তারা কী করেছিল what কন্টেন্টকন্ট্রোলটি সামগ্রী প্রদর্শন করার জন্যও ব্যবহার করা যেতে পারে তবে এটি উভয় ধারক এবং উপস্থাপক হিসাবে কাজ করে। সুতরাং উপরের নমুনা কোডটিতে এর উদ্দেশ্যটি ধারক এবং উপস্থাপক হিসাবে বিভক্ত। গতিশীল নমুনায় আপনি ধারকটি প্রদর্শন করতে পারেন (এটির কোনও খালি পটভূমি বা এটি এখনও নেই এমন কিছু থাকতে পারে) এবং তারপরে এটি উপস্থাপক সামগ্রীতে গতিশীলভাবে পূরণ করুন। একটি ধারকটির মাত্রা রয়েছে (প্রস্থ, উচ্চতা ইত্যাদি), আপনি সেই বৈশিষ্ট্যগুলি ধারক নিয়ন্ত্রণে রেখে তাতে লিখিত সামগ্রী উপস্থাপন করেন। নমুনায় কন্টেন্টকন্ট্রোলটি উপস্থাপক সামগ্রী সহ কী করতে হবে তা নির্ধারণ করে।
কখনও কখনও একটি উদাহরণ তাত্ত্বিক জারগনের চেয়ে সহজ। একটি এমএস ওয়েব সাইটে (নীচে স্ক্রোল করুন: http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter(v=vs.110).aspx ) হিসাবে এটি একটি বোতামটি ব্যবহার করে একটি উদাহরণ. একটি বোতামের একটি কন্টেন্টকন্ট্রোল রয়েছে, যা আপনাকে একটি নিয়ন্ত্রণ বা একটি কাস্টম নিয়ন্ত্রণ স্থাপন করতে দেয় যা কোনও চিত্র, পাঠ্য, চেকবক্স, স্ট্যাকপ্যানেল, গ্রিড যাই হোক না কেন হতে পারে।
বোতামের কাস্টমাইজেশনের পরে, এখন এক্সএমেলে, আপনি লিখতে পারেন
<my:Button>
<my:Button.Content>
<my:AnotherControl>
</my:Button.Content>
</my:Button>
উপরের উদাহরণ কোডে, "আমার: বাটন.সন্টেন্ট" হ'ল কনটেন্ট কন্ট্রোল। অনিয়ন্ত্রকটি কন্টেন্টপ্রেসেন্টার যেখানে রয়েছে তা আপনি নির্দিষ্ট করেছেন to
একইভাবে, যখন টেক্সটবক্স এবং টেক্সটব্লকের সাথে তুলনা করা হয়, তখন টেক্সটবক্সের উপরের বোতামের উদাহরণের মতো টেক্সটবক্সের মধ্যে সামগ্রী স্টাফ করার জন্য একটি বিষয়বস্তু রয়েছে whereas একটি টেক্সটব্লক কেবল আপনাকে পাঠ্য প্রবেশ করতে দেয়।
Button
নয় আছে একটি [ ContentControl
] (msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol (উ = vs.110) .aspx), এটা একটি হল (উত্তরাধিকারী থেকে) ContentControl
। Button
হয়েছে একটি ContentPresenter
। নোট করুন যে আপনি এটি স্ট্যান্ডার্ডের সাথে করতে পারেন Button
, এটি কাস্টমাইজ করার দরকার নেই।
ContentPresenter
, একটি ContentControl
ঠিক যেমন ভাল ব্যবহার করা যেতে পারে ControlTemplate
বিষয়বস্তুর প্রদর্শন করে Button
। যেমন, এটি প্রশ্নের উত্তর দেয় না।