কীভাবে ডকস্টাইল ব্যবহার করতে হবে? ডাব্লুপিএফ-র স্ট্যান্ডার্ড নিয়ন্ত্রণের জন্য?


92

আমি উইন্ডোজ ফর্ম থেকে ব্যবহার করছি, যে আমি একটি প্যানেল তৈরি করি, এর ভিতরে নিয়ন্ত্রণ DockStyle.Fillরাখি এবং পার্শ্ববর্তী প্যানেলে তাদের আকারটি সর্বাধিক বাড়িয়ে দেই ।

ডাব্লুপিএফ-তেও আমি একই জিনিস রাখতে চাই। আমার একটি ট্যাবকন্ট্রোল রয়েছে এবং আমি এর আকারটি যতটা সম্ভব ফর্মটি পূরণ করতে চাই। আমার একটি ফিতা নিয়ন্ত্রণ রয়েছে (রিবনকন্ট্রোলস লাইবারি) এবং বাকি ফর্মটি সর্বোচ্চ আকারে ট্যাবকন্ট্রোল দিয়ে পূর্ণ হতে চান।

(আমি ভিজ্যুয়াল স্টুডিওতে ডকিংয়ের মতো নিয়ন্ত্রণগুলি ডক করতে চাই না, কেবল পুরানো ডকিং প্রক্রিয়া)

উত্তর:


181

উইনফর্মসের ডকস্টাইল.ফিলের সমতুল্য হ'ল:

HorizontalAlignment="Stretch" VerticalAlignment="Stretch"

এটি প্রায় নিয়ন্ত্রণের জন্য ডিফল্ট, সুতরাং সাধারণভাবে আপনাকে ডাব্লুপিএফ নিয়ন্ত্রণের মূল পাত্রে পূরণ করার জন্য কিছু করার দরকার নেই : তারা স্বয়ংক্রিয়ভাবে এটি করে do এটি এমন সমস্ত ধারকগুলির ক্ষেত্রে সত্য যা তাদের বাচ্চাদের ন্যূনতম আকারে চেপে ধরে না।

সাধারণ ভুল

আমি এখন বেশ কয়েকটি সাধারণ ভুল ব্যাখ্যা করব যা HorizontalAlignment="Stretch" VerticalAlignment="Stretch"প্রত্যাশা অনুযায়ী কাজ করা থেকে বিরত থাকে ।

1. স্পষ্ট উচ্চতা বা প্রস্থ

একটি সাধারণ ভুল হ'ল স্পষ্টভাবে একটি নিয়ন্ত্রণের জন্য প্রস্থ বা উচ্চতা নির্দিষ্ট করা। সুতরাং আপনার যদি এটি থাকে:

<Grid>
  <Button Content="Why am I not filling the window?" Width="200" Height="20" />
  ...
</Grid>

কেবল প্রস্থ এবং উচ্চতা বৈশিষ্ট্যগুলি সরান:

<Grid>
  <Button Content="Ahhh... problem solved" />
  ...
</Grid>

২. প্যানেলে ন্যূনতম আকারের নিয়ন্ত্রণ থাকে

আর একটি সাধারণ ভুল হ'ল এতে থাকা প্যানেলটি আপনার নিয়ন্ত্রণ যতটা শক্ত হবে ততই শক্ত করে ফেলুন। উদাহরণস্বরূপ, একটি উল্লম্ব স্ট্যাকপ্যানেল সর্বদা এটির মতো যথাক্রমে ছোট ছোট ছোট অংশগুলিকে চেপে রাখবে:

<StackPanel>
  <Button Content="Why am I squished flat?" />
</StackPanel>

অন্য প্যানেলে পরিবর্তন করুন এবং আপনি যেতে ভাল হবে:

<DockPanel>
  <Button Content="I am no longer squished." />
</DockPanel>

এছাড়াও, যে কোনও গ্রিড সারি বা কলাম যার উচ্চতা "অটো" সেভাবে একইভাবে তার বিষয়বস্তুটিকে সেদিকেই আটকায়।

এমন পাত্রে কয়েকটি উদাহরণ যা তাদের বাচ্চাদের দমন করে না:

  • কন্টেন্টকন্ট্রোলগুলি কখনই তাদের বাচ্চাদের গ্রাস করে না (এতে বর্ডার, বোতাম, চেকবক্স, স্ক্রোলভিউয়ার এবং আরও অনেকগুলি রয়েছে)
  • একটি একক সারি এবং কলাম সহ গ্রিড
  • "*" আকারের সারি এবং কলামগুলির সাথে গ্রিড
  • ডকপ্যানেল তার শেষ শিশুটিকে গ্রাস করবে না
  • ট্যাবকন্ট্রোল এটির সামগ্রীটি ছড়িয়ে দেয় না

এমন পাত্রে কয়েকটি উদাহরণ যা তাদের বাচ্চাদের দমন করে:

  • স্ট্যাকপ্যানেল তার ওরিয়েন্টেশনের দিকের দিকে চেপে ধরে
  • একটি "অটো" আকারের সারি বা কলামটি সেই দিকটিতে চেপে যায় G
  • ডকপ্যানেল তাদের ডকের দিকের শেষ শিশুটি বাদে অন্য সব কিছু গ্রাস করে
  • ট্যাবকন্ট্রোল এটির শিরোনামটি সঙ্কুচিত করে (ট্যাবটিতে কী প্রদর্শিত হয়)

3. সুস্পষ্ট উচ্চতা বা প্রস্থ আরও বাইরে

আমি গ্রিড বা ডকপ্যানেলকে কতগুলি স্পষ্ট উচ্চতা এবং প্রস্থ প্রদান করে দেখছি এটি কতবার আশ্চর্যজনক:

<Grid Width="200" Height="100">
  <Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>

সাধারণভাবে আপনি কোনও প্যানেলকে একটি স্পষ্ট উচ্চতা বা প্রস্থ দিতে চান না। লেআউট সমস্যাগুলি নির্ণয়ের সময় আমার প্রথম পদক্ষেপটি হ'ল আমি যে সুনির্দিষ্ট উচ্চতা বা প্রস্থ খুঁজে পেতে পারি তা সরিয়ে ফেলা।

৪. উইন্ডোটি সাইজটো টন কনটেন্ট যখন হওয়া উচিত নয়

আপনি যখন সাইজটো কনটেন্ট ব্যবহার করবেন তখন আপনার সামগ্রী ন্যূনতম আকারে চেপে যাবে। অনেক অ্যাপ্লিকেশন এ এটি খুব দরকারী এবং সঠিক পছন্দ। তবে আপনার সামগ্রীতে যদি "প্রাকৃতিক" আকার না থাকে তবে আপনি সম্ভবত সাইজটোস কনটেন্ট বাদ দিতে চাইবেন।


আমি এখানে মোটামুটি জটিল নতুন লেআউট সম্পর্কিত প্রশ্ন রেখেছি । আপনার উত্তরটি পড়ার পরে ভাবছি আপনি এটি বের করতে পারেন। চিয়ার্স
বেরিলে

7
দুর্দান্ত উত্তর! আমি আশা করি আমি কোনওভাবে আপনাকে বোনাস পয়েন্ট দিতে পারতাম। :)
জিম রাদেন

@ জিম রাদেন: আপনি এই প্রশ্নে অনুগ্রহ যোগ করতে পারেন এবং রে বার্নসকে পয়েন্টগুলি বরাদ্দ করতে পারেন;)
সিট্রোনাস

4
ভবিষ্যতের পাঠকদের পক্ষে সাইড নোট: আপনি পুনরায় কম্পাইল না করা পর্যন্ত এটি ডিজাইন দৃশ্যে আপডেট হবে না।
ডেভিড

"<বাটন সামগ্রী =" কেন আমি উইন্ডোটি পূরণ করছি না? "প্রস্থ =" 200 "উচ্চতা =" 20 "/>" আমাকে ক্র্যাক আপ করেছে! এক্সডি
জ্যাক ফ্রস্ট

7

আপনি যা বলতে চান তা করতে পারেন DockPanel LastChildFill="True"এবং তারপরে আপনি ফিলার হতে চান তা নিশ্চিত করেই আসলে শেষ শিশু!

গ্রিড এমন একটি বিন্যাসের জন্তু যা আপনি বেশিরভাগ কিছুই করতে পারেন, তবে ডকপ্যানেল সাধারণত আপনার বহির্মুখী বিন্যাস প্যানেলের জন্য সঠিক পছন্দ। এখানে একটি psuedocode উদাহরণ:

<DockPanel LastChildFill="True">
    <MyMenuBar DockPanel.Dock="Top"/>
    <MyStatus DockPanel.Dock="Bottom"/>

    <MyFillingTabControl />
</DockPanel>

5

কেবল দুটি সারি যুক্ত গ্রিডে আপনার নিয়ন্ত্রণগুলি মোড়ানো করুন। গ্রিডটি প্রদত্ত সমস্ত স্থান স্বয়ংক্রিয়ভাবে ব্যবহার করবে এবং আপনি "*" এর উচ্চতা দিয়ে সমস্ত স্থান বামে নিতে সারিগুলি সংজ্ঞায়িত করতে পারেন। আমার উদাহরণের প্রথম সারিতে (উচ্চতা = "অটো") ফিতা দ্বারা প্রয়োজনীয় তত স্থান নেবে। আশা করি এইটি কাজ করবে.

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <Ribbon Grid.Row="0" />

  <TabPage Grid.Row="1" />
</Grid>

গ্রিডের চাইল্ড কন্ট্রোলগুলিতে "গ্রিড.রো রো = .." বৈশিষ্ট্য যুক্ত করে তারা গ্রিডের সারিগুলিতে নির্ধারিত হয়। তারপরে গ্রিডটি আকারের সংজ্ঞা অনুসারে সংজ্ঞায়িত করে বাচ্চাদের আকার দেবে।


ধন্যবাদ, সঠিক দিকে চলে গেছে। আমি গ্রিডটি সন্নিবেশ করানোতে সক্ষম হয়েছি, তবে এখন আমার ট্যাবকন্ট্রোলকে বলা দরকার যে এটি এখনও উপলব্ধ যে সমস্ত আকার ব্যবহার করবে? আমি কীভাবে এটি অর্জন করতে পারি?
সিট্রোনাস

আপনাকে ট্যাবকন্ট্রোলের জন্য "গ্রিড.রো" বৈশিষ্ট্য যুক্ত করতে হবে এবং সংশ্লিষ্ট সারি সংজ্ঞাটি "*" এর উচ্চতা দিতে হবে - যেমন উদাহরণে দেখানো হয়েছে।
অ্যান্ডিপ

0

আমি এখানে অনেক পদ্ধতি চেষ্টা করেছিলাম কিন্তু আমার সমস্যার সমাধান করতে পারি না। (নিয়ন্ত্রণে অন্যান্য নিয়ন্ত্রণ পূরণ করুন)

আমি এটি না পাওয়া পর্যন্ত

<Name_Control Height="auto" Width="auto"/>
//default
//HorizontalAlignment="Stretch" 
//VerticalAlignment="Stretch"

উদাহরণ:

//UserControl:
<UserControl Name="UC_Test" Height="auto" Width="auto" />
//Grid: 
<Grid Name="Grid_test" Grid.ColumnSpan="2" Grid.Row="2" />
//Code: 
Grid_test.Children.Add(UC_Test);

সহজ নকশা জন্য

<UserControl Name="UC_Test" Height="100" Width="100" />
//Code
Grid_test.Children.Add(UC_Test);
UC_Test.Width = Double.NaN;
UC_Test.Height = Double.NaN;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.