স্ট্যাক প্যানেলে আইটেম সারিবদ্ধ করবেন?


148

আমি ভাবছিলাম যে আমার অনুভূমিকমুখী স্ট্যাকপ্যানেলে 2 টি নিয়ন্ত্রণ থাকতে পারে যাতে ডান আইটেমটি স্ট্যাকপ্যানেলের ডানদিকে ডক করা যায়।

আমি নিম্নলিখিত চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয়নি:

<StackPanel Orientation="Horizontal">
    <TextBlock>Left</TextBlock>
    <Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>

উপরের স্নিপেটে আমি বোতামটি স্ট্যাকপ্যানেলের ডানদিকে ডক করতে চাই।

দ্রষ্টব্য: আমার এটি গ্রিড নয় স্ট্যাকপ্যানেলের মাধ্যমে করা দরকার


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

হ্যাঁ, আমি কেউ কেবল আমাকে এইভাবে স্ট্যাক প্যানেলে পূর্ণ একটি প্রকল্প দিয়েছি, তিনি চান যে এটি এটি ঠিক করা হোক।
শিমি ওয়েইটস্যান্ডলার

3
আমি জানি এটি (চূড়ান্ত) দেরী হয়েছে তবে আপনি কি স্ট্যাকপ্যানেলের মধ্যে ডকপ্যানেল রাখতে পারবেন না?
কিয়ান

1
@ কিয়ান, আপনি আপনার মন্তব্যের সাথে একদম ঠিক বলেছেন, আমি এটিকে নিজেই ভেবেছিলাম, চেষ্টা করেছি এবং এটি পুরোপুরি কার্যকর হয়েছে।
গ্যাব্রিয়েলিয়াস

উত্তর:


221

আপনি এটি দিয়ে এটি অর্জন করতে পারেন DockPanel:

<DockPanel Width="300">
    <TextBlock>Left</TextBlock>
    <Button HorizontalAlignment="Right">Right</Button>
</DockPanel>

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

হালনাগাদ

মন্তব্যে নির্দেশিত হিসাবে আপনি এ এর FlowDirectionসম্পত্তিও ব্যবহার করতে পারেন StackPanel। @ ডি_বেস্টার এর উত্তর দেখুন


1
এটাই আমি 'ইত্যাদি' দিয়ে বোঝাতে চাইছিলাম আমি অনুমান করি উত্তরটি হ'ল না, এবং এটি কঠোর উপায়ে করতে হবে, উপরের
জেএমডির

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

2
উইন্ডোজ 8 এ কোনও ডকপ্যানেল নেই, অন্য কোনও সমাধান?
ক্রিস্টোফ

@ ডার্কভোলমার আসলে স্ট্যাকপ্যানেলটি বেশ ভালভাবে কাজ করে, আমার উত্তর দেখুন।
ডি_বেস্টার

1
আপনি যদি আইটেমটি সর্বাধিক সারিবদ্ধ করতে চান তবে সেট করুন LastChildFill="False"এটি <DockPanel LastChildFill="False">দেখুন স্ট্যাকওভারফ্লো.com
ইউ ইয়ং জিয়ান

68

ইয়ো সেট করতে পারেন FlowDirectionএর Stack panelজন্য RightToLeft, এবং তারপর সব আইটেম ডানদিকে প্রান্তিককৃত করা হবে না।


3
তবে লক্ষ করুন যে এটি স্ট্যাকপ্যানেলে নিয়ন্ত্রণগুলির ক্রম (বিপরীত) হয়।
rumblefx0

1
@ স্ল্যাটারি যদি ফ্লোডাইরেকশনটি সমস্যা হয় তবে কেবল একটি অন্য স্ট্যাকপ্যানেলে রেখে ফ্লোডাইরেকশনটি নির্দিষ্ট করুন। আমার উত্তর দেখুন।
ডি_বেস্টার

1
@ rumblefx0: দ্রষ্টব্য, ডকপ্যানেল নিয়ন্ত্রণগুলির ক্রমও বিপরীত করে, যদি সেগুলি ডান বা নীচে ডক করা থাকে। এটি কারণ প্রথম নিয়ন্ত্রণ, প্রথম ডক হয়।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

29

যারা এই প্রশ্ন উপর পদস্খলন জন্য, এখানে কিভাবে এই লেআউটটি অর্জন করতে সঙ্গে একটি Grid:

<Grid>
    <TextBlock Text="Server:"/>
    <TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>

সৃষ্টি

Server:                                                                   http://127.0.0.1

18

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

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="1" Orientation="Horizontal">
        <!-- Right aligned controls go here -->
    </StackPanel>
</Grid>

ডিজাইন এবং রানটাইম উভয় ক্ষেত্রেই নিয়ন্ত্রণের সংখ্যা নির্বিশেষে স্ট্যাকপ্যানেলের অভ্যন্তরীণ নিয়ন্ত্রণগুলি উপলভ্য জায়গার ডানদিকে একত্রিত হওয়ার ফলস্বরূপ। হ্যাঁ! :)


ফ্লো ডাইরেকশন যদি সমস্যা হয় তবে কেবল একটি অন্য স্ট্যাকপ্যানেলে রেখে ফ্লো ডাইরেকশনটি নির্দিষ্ট করুন। আমার উত্তর দেখুন।
ডি_বেস্টার

আমি মনে করি নেস্টেড প্রবাহের দিকনির্দেশের সাথে জগাখিচা করার চেয়ে এটি অনেক বেশি পরিষ্কার সমাধান
রস

5

এটি আমার পক্ষে নিখুঁতভাবে কাজ করে। আপনি ডানদিকে শুরু করার পরে প্রথমে বোতামটি রেখে দিন। যদি ফ্লো ডাইরেকশন কোনও সমস্যা হয়ে যায় তবে কেবল এটির চারপাশে একটি স্ট্যাকপ্যানেল যুক্ত করুন এবং সেই অংশটির জন্য ফ্লোডাইরেকশন = "বামপাখরাইট" নির্দিষ্ট করুন। অথবা প্রাসঙ্গিক নিয়ন্ত্রণের জন্য সহজেই ফ্লোডাইরেকশন = "বামপন্থরশক্তি" নির্দিষ্ট করুন।

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" FlowDirection="RightToLeft">
    <Button Width="40" HorizontalAlignment="Right" Margin="3">Right</Button>
    <TextBlock Margin="5">Left</TextBlock>
    <StackPanel FlowDirection="LeftToRight">
        <my:DatePicker Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
    </StackPanel>
    <my:DatePicker FlowDirection="LeftToRight" Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
</StackPanel>

4
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Left"  />
    <Button Width="30" Grid.Column="1" >Right</Button>
</Grid>

0

উইন্ডোজের জন্য 10 স্ট্যাক প্যানেলের পরিবর্তে আপেক্ষিকপ্যানেল ব্যবহার করুন এবং ব্যবহার করুন

relativepanel.alignrightwithpanel = "সত্য"

অন্তর্ভুক্ত উপাদান জন্য।


0

আপনার যদি আমার মতো সমস্যা হয় যেখানে আমার উল্লম্ব স্ট্যাক প্যানেলে লেবেলগুলি কেন্দ্রীভূত ছিল তবে নিশ্চিত হয়ে নিন যে আপনি সম্পূর্ণ প্রস্থ নিয়ন্ত্রণ ব্যবহার করেছেন। প্রস্থ সম্পত্তি মুছুন বা আপনার বোতামটি একটি পূর্ণ-প্রস্থের পাত্রে রাখুন যা অভ্যন্তরীণ প্রান্তিককরণের অনুমতি দেয়। ডাব্লুপিএফ লেআউটটি নিয়ন্ত্রণ করতে পাত্রে ব্যবহার সম্পর্কে সমস্ত কিছু।

<StackPanel Orientation="Vertical">
    <TextBlock>Left</TextBlock>
    <DockPanel>
        <Button HorizontalAlignment="Right">Right</Button>
    </DockPanel>
</StackPanel>

বাম লেবেল সহ উল্লম্ব স্ট্যাকপ্যানেল এবং তারপরে রাইট বোতামটি

আশা করি এটা কাজে লাগবে.


-8

আপনার হার্ড-কোডিং আকারের মানগুলি এড়াতে চাইলে আপনি যা চান তা নয় তবে কখনও কখনও আমি এর জন্য "শিম" (বিভাজক) ব্যবহার করি:

<Separator Width="42"></Separator>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.