উপলব্ধ স্থান পূরণের জন্য ডাব্লুপিএফ-এ নিয়ন্ত্রণ কীভাবে পাবেন?


303

কিছু ডাব্লুপিএফ নিয়ন্ত্রণগুলি (যেমন Button) মনে হয় খুশি হয়ে তার 'ধারকটিতে সমস্ত উপলব্ধ জায়গা গ্রাস করে তবে যদি আপনি এটির যে উচ্চতা নির্ধারণ না করেন তবে নির্দিষ্ট করে দিন।

এবং কিছু, এখনই আমার ব্যবহার করা দরকারগুলির মতো, (মাল্টলাইন) TextBoxএবং ListBoxমনে হচ্ছে কেবল তাদের বিষয়বস্তুর সাথে মানিয়ে নেওয়ার জন্য প্রয়োজনীয় স্থান নেওয়া এবং আরও কিছু নয়।

আপনি যদি এই ছেলেগুলিকে একটি ঘরে একটি কক্ষে রাখেন তবে এগুলি UniformGridউপলব্ধ জায়গার সাথে মানিয়ে নিতে প্রসারিত হবে। তবে UniformGridসকল পরিস্থিতিতে দৃষ্টান্তগুলি সঠিক নয় for যদি আপনার নিজের এবং অন্যান্য * সারিগুলির মধ্যে উচ্চতা বিভক্ত করার জন্য কয়েকটি সারি একটি উচ্চতাতে সেট করা গ্রিড থাকে? আপনার যদি একটি থাকে StackPanelএবং আপনার কাছে একটি Label, ক Listএবং এ থাকে তবে Buttonকীভাবে আপনি লেবেল এবং বোতামটি না খেয়ে সমস্ত স্থান গ্রহণের জন্য তালিকাটি পেতে পারেন?

আমি মনে করি এটি সত্যিই একটি মৌলিক বিন্যাসের প্রয়োজনীয়তা হবে তবে আমি কীভাবে তাদের যে জায়গাটি পূরণ করতে পারি তা কীভাবে তা অর্জন করতে পারি তা বুঝতে পারি না (এগুলিতে রাখলে DockPanelএটি পূরণ করাও কার্যকর হয় না, দেখে মনে হয়) DockPanelশুধুমাত্র স্থান তার 'subcontrols প্রয়োজনীয়) লাগে।

একজন রিসাইজেবল গুই বেশ ভয়ঙ্কর হবে যদি আপনি সাথে খেলতে ছিল Height, Width, MinHeight, MinWidthইত্যাদি

আপনি যে গ্রিড সেলটি দখল করেছেন তাতে কি আপনি নিজের Heightএবং Widthসম্পত্তি যুক্ত করতে পারেন? অথবা এটি করার অন্য কোনও উপায় আছে?


1
ইউনিফর্মগ্রীড আশ্চর্যজনক, আমার নতুন ডিফল্ট গোটো ট্যাগ। আমি স্ট্যাকপ্যানেলসের সরলতা পছন্দ করেছিলাম (আমাকে একটি ডিভের কথা মনে করিয়ে দেয়) তবে ইউনিফর্ম গ্রিড আমার যা প্রয়োজন তা ঠিক করে দেয়।
টেরেন্স

পুনরায় ইউনিফর্মগ্রিড। ইউনিফর্মের উপর জোর দেওয়া হচ্ছে। দেখে মনে হচ্ছে আপনি কলামের প্রস্থের কোনও সারি উচ্চতা সামঞ্জস্য করতে পারবেন না। এটি কেবলমাত্র উপযুক্ত যদি প্রতিটি সামগ্রীর টুকরা একই আকারের হয়। আমি আমার স্ট্যাকপ্যানেলকে গ্রিডের সাথে প্রতিস্থাপন করেছি এবং স্ট্রেচ তারপরে যেমনটি প্রত্যাশা করেছিলেন তেমনভাবে কাজ করেছিল।
পিডিএসচুলার

এই নিবন্ধটি আমাকে পাঠ্যবাক্সগুলি প্রসারিত করতে সহায়তা করেছে।
jpaugh

উত্তর:


162

Panelপ্রয়োগগুলি থেকে প্রাপ্ত প্রতিটি নিয়ন্ত্রণ পৃথক বিন্যাস যুক্তিযুক্ত কার্য সম্পাদন করে Measure()এবং Arrange():

  • Measure() প্যানেল এবং এর প্রতিটি বাচ্চার আকার নির্ধারণ করে
  • Arrange() আয়তক্ষেত্রটি নির্ধারণ করে যেখানে প্রতিটি নিয়ন্ত্রণ রেন্ডার করে

শেষ সন্তানের DockPanelঅবশিষ্ট স্থানটি পূরণ করে। আপনি LastChildসম্পত্তি সেট করে এই আচরণটি অক্ষম করতে পারেনfalse

StackPanelতার পছন্দসই আকার জন্য প্রতিটি শিশুর জিজ্ঞেস এবং তারপর তাদের stacks। স্ট্যাক প্যানেল Measure()প্রতিটি শিশুকে একটি উপলব্ধ আকারের সাথে কল করেInfinity এবং তারপরে সন্তানের পছন্দসই আকারটি ব্যবহার করে।

একজন Grid সমস্ত উপলভ্য স্থান দখল করে, তবে এটি প্রতিটি শিশুকে তাদের পছন্দসই আকারে সেট করবে এবং তারপরে সেগুলি সেলে রাখবে।

আপনার নিজের লেআউট যুক্তিটি প্রয়োগ করে Panelএবং তারপরে ওভাররাইডিং MeasureOverride()এবং এর মাধ্যমে প্রয়োগ করতে পারেন ArrangeOverride()

একটি সহজ উদাহরণের জন্য এই নিবন্ধটি দেখুন ।


8
লিঙ্কটি এখন মারা গেছে
21368 এ ব্যবহারকারী 3690202

6
@ user3690202 আর্কাইভ.অর্গ আপনার বন্ধু। লিঙ্কটি পুনরায় তৈরি করা হয়েছে।
রাফিন

4
বিষয়টি এমএসডিএন-তে এখনও বিদ্যমান রয়েছে, তবে লিঙ্কটি এতে পরিবর্তিত হয়েছে: ডকস.মাইক্রোসফটকম
Andrea Antonangeli

2
The last child of the DockPanel fills the remaining space: এটি ছিল আমার বোঝার চাবিকাঠি। আমি সর্বদা যদিও স্পষ্ট ডক ছাড়াই উপাদানটি স্থান পূরণ করে।
স্পট করা

238

এমন কিছু বৈশিষ্ট্যও রয়েছে যা আপনি কোনও নিয়ন্ত্রণকে তার উপলভ্য স্থান পূরণ করতে বাধ্য করতে পারেন যখন তা অন্যথায় না করে। উদাহরণস্বরূপ, আপনি বলতে পারেন:

HorizontalContentAlignment="Stretch"

... একটি নিয়ন্ত্রণের বিষয়বস্তুকে অনুভূমিকভাবে প্রসারিত করতে বাধ্য করা। অথবা আপনি বলতে পারেন:

HorizontalAlignment="Stretch"

... নিয়ন্ত্রণকে নিজের পিতামাতাকে পূরণ করতে অনুভূমিকভাবে প্রসারিত করতে বাধ্য করা।


88
এই সমস্ত ক্ষেত্রে উল্লেখ করা সবচেয়ে কুখ্যাত প্যানেল হ'ল স্ট্যাকপ্যানেল। এটিতে কন্টেন্টএলাইনমেন্ট বৈশিষ্ট্য নেই এবং তার বাচ্চাদের স্ট্রেচে সেট করা তারার আকারের গ্রিডের অভ্যন্তরে কোনও প্রভাব ফেলবে না। খুবই হতাশাজনক. এটি প্রায় যেন স্ট্যাকপ্যানেলই প্রথম কনটেইনার ছিল ডাব্লুপিএফ দল লিখেছিল এবং এটি কেস হওয়ার কারণে ভোগে।
ব্রেন্ট শোলি

4
@ ব্রেন্ট - আহ! আমি আমার স্ট্যাকপ্যানেলের সামগ্রী সঠিকভাবে পূরণ করার চেষ্টা করতে গিয়ে আটকে গিয়েছি। ধন্যবাদ! আমি ভেবেছিলাম এটি কেবল এমন কিছু যা আমি খুব ভুল করছি।
অ্যাশলে গ্রেনন

8
@townsean স্ট্যাক প্যানেল অত্যন্ত সীমিত, আপনাকে 0 একটি UniformGrid ব্যবহার প্রসারিত হয় এবং সারি বা কলাম সেটিং সঙ্গে অনুরূপ আচরণ পেতে পারেন
ForbesLindesay

2
@ তাসকান ৩60০ ইউনিফর্মগ্রিড কেবলমাত্র কোষগুলিকে একই আকারের অনুমতি দেয়। আমি শেষ পর্যন্ত একটি গ্রিড ব্যবহার করেছি, মনে হচ্ছে কাজ করে। বিরক্তিকর স্ট্যাকপ্যানেল যা আপাতদৃষ্টিতে ডিজাইন করেছেন তা কী করে না।
তারকাডাল

4
@ তারকাডাল ইয়ে, ইউনিফর্মগ্রিড যদি একই আকারের হয় তবে গ্রিড, আপনি যদি জটিল আপেক্ষিক আকারগুলি নির্দিষ্ট করতে চান তবে সামগ্রীর উপর ভিত্তি করে প্যাকটি স্ট্যাক প্যানেলে স্ট্যাক করুন এবং কতটা স্থান উপলব্ধ তা উপেক্ষা করুন।
ফোর্বস লিন্ডসে

18

ঠিক আছে, পোস্ট করার পরে আমি নিজেই এটি আবিষ্কার করেছি, যা সবচেয়ে বিব্রতকর উপায়। :)

দেখে মনে হচ্ছে স্ট্যাকপ্যানেলের প্রত্যেক সদস্যই তার সর্বনিম্ন অনুরোধ করা আকারটি পূরণ করবেন।

ডকপ্যানেলে, আমি জিনিসগুলিকে ভুল ক্রমে ডক করেছি। টেক্সটবক্স বা লিস্টবক্স যদি বিন্যাস ছাড়াই একমাত্র ডকড আইটেম হয় বা তারা সর্বশেষ যুক্ত হয় তবে তারা বাকী স্থানটি পছন্দ মতো পূরণ করবে।

আমি এটি পরিচালনা করার জন্য আরও মার্জিত পদ্ধতি দেখতে চাই, তবে এটি করবে।


আমি কেবল এটি চিহ্নিত করতে চাই (এই পুরানো প্রশ্নে!) যে "বিন্যাস ছাড়াই" এখানে একটি মূল বাক্যাংশ, কমপক্ষে এটি আমার পক্ষে ছিল।
মাইকবাজ - এমএসএফটি

4

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

উদাহরণস্বরূপ, স্ট্যাকপ্যানেলের প্রস্থটি এর বিস্তৃত উপাদানগুলির মতো বিস্তৃত হবে। সুতরাং, সমস্ত সঙ্কীর্ণ উপাদানগুলির অতিরিক্ত কিছুটা জায়গা রয়েছে। প্রান্তিককরণ বৈশিষ্ট্যগুলি অতিরিক্ত স্থান সহ শিশু উপাদান কী করে তা নিয়ন্ত্রণ করে।

উভয় বৈশিষ্ট্যের জন্য ডিফল্ট মান হ'ল স্ট্রেচ, তাই সমস্ত উপাদান উপলব্ধ স্থান পূরণ করতে সন্তানের উপাদান প্রসারিত হয়। অতিরিক্ত বিকল্প বাম, কেন্দ্র এবং জন্য সঠিক অন্তর্ভুক্ত HorizontalAlignment এবং শীর্ষ, কেন্দ্র এবং বটম VerticalAlignment


31
এটি যদি সর্বদা সত্য হয় তবে মূল প্রশ্নটি জিজ্ঞাসা করা হত না। উদাহরণস্বরূপ, একটি লেবেল এবং একটি পাঠ্যবক্স সহ একটি অনুভূমিক স্ট্যাকপ্যানেল নিন। টেক্সটবক্সের ডানদিকে অতিরিক্ত জায়গা রয়েছে। পাঠ্যবক্সটি অটো প্রস্থে সেট করা আছে। হরাইজোনালআলাইনমেন্টের জন্য স্ট্রেচ সেট করা পাঠ্যবক্সটি বাকী স্থান পূরণ করবে না।
ব্রেন্ট শুলি

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