ডাব্লুপিএফ পাঠ্যবক্স স্ট্যাকপ্যানেল পূরণ করবে না


96

যার উপরে সেট করা আছে তার TextBoxমধ্যে আমার একটি নিয়ন্ত্রণ রয়েছে তবে বাকী স্ট্যাকপ্যানেল স্থান পূরণ করার জন্য পাঠ্যবক্স পেতে পারি না।StackPanelOrientationHorizontal

এক্সএএমএল:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="180" Width="324">

    <StackPanel Background="Orange" Orientation="Horizontal" >
        <TextBlock Text="a label" Margin="5" VerticalAlignment="Center"/>
        <TextBox Height="25" HorizontalAlignment="Stretch" Width="Auto"/>
    </StackPanel>
</Window>

এবং এটি দেখতে এটির মতো:

বিকল্প পাঠ

কেন সেই পাঠ্যবক্স স্ট্যাকপ্যানেলটি পূরণ করছে না?

আমি জানি একটি Gridনিয়ন্ত্রণ ব্যবহার করে আমার আরও নিয়ন্ত্রণ থাকতে পারে , আমি কেবল বিন্যাসটি সম্পর্কে বিভ্রান্ত।

উত্তর:


148

আমার একই সমস্যা ছিল StackPanel, এবং আচরণটি "ডিজাইনের মাধ্যমে"। StackPanelএমনকি দৃশ্যমান অঞ্চলের বাইরেও "স্ট্যাকিং" জিনিসগুলির জন্য বোঝানো হয়, সুতরাং এটি আপনাকে স্ট্যাকিংয়ের মাত্রায় অবশিষ্ট স্থান পূরণ করতে দেয় না।

আপনি সেটটির DockPanelসাথে LastChildFillসেটটি ব্যবহার করতে পারেন trueএবং Leftআপনার প্রয়োজনীয় প্রভাবটি অনুকরণ করতে সমস্ত নন-ফিলিং নিয়ন্ত্রণগুলিকে ডক করতে পারেন।

<DockPanel Background="Orange" LastChildFill="True">
    <TextBlock Text="a label" Margin="5" 
        DockPanel.Dock="Left" VerticalAlignment="Center"/>
    <TextBox Height="25" Width="Auto"/>
</DockPanel >

7
কেবল পরিষ্কার করার জন্য - লাস্টচিল্ডফিলটি ডিফল্টরূপে "ট্রু" এ সেট হয়ে যায় এবং টেক্সটবক্সের জন্য প্রসারিত করতে হরাইজনালএলাইনমেন্ট সেট করার কোনও প্রভাব নেই। :-)
গবলিন

4
@ গবলিন: হ্যাঁ ... আমি ওপি কোডটি অনুলিপি করে পেস্ট করেছি তবে মুছে ফেলতে ভুলে গেছি HorizontalAlignment। :)
জাচ জনসন

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

4
@peter কাপড় wpf একটি দীর্ঘ সময় না করে কিন্তু আপনি প্রথম কলামটি সেট দিয়ে গ্রিড কিছু বাছাই চেষ্টা করতে পারে প্রাপ্তিসাধ্য স্থান (হাতে নিতে stackoverflow.com/questions/12432189/... )
জ্যাক জনসন

6
আমি একটু পার্টি এখানে দেরী, কিন্তু @peter am: আপনি ব্যবহার করতে পারেন FlowDirection="RightToLeft"উপর DockPanel, তাই আপনার শেষ সন্তান বাম এক হতে হবে, অবশিষ্ট স্থান ব্যবহার।
ডেনিস

17

আমি পরিবর্তে একটি গ্রিড ব্যবহার করার পরামর্শ দেব:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="180" Width="324">

    <Grid Background="Orange">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Text="a label" 
           VerticalAlignment="Center"/>
        <TextBox  Grid.Column="1"/>
    </Grid>
</Window>

এই সমস্যাটি ঘুরে দেখার অন্য উপায়টি হ'ল ডানদিকে পরিবর্তে উপরে লেবেল স্ট্যাক করা। আমি লক্ষ্য করেছি যে ইউডাব্লুপি একটি অন্তর্নির্মিত শিরোনামযুক্ত সম্পত্তি রয়েছে যার জন্য আপনি এটি ব্যবহার করতে পারবেন, এটি নিশ্চিত নয় যে শিরোনাম সম্পত্তি WPF এর জন্য বিদ্যমান কিনা for

<TextBox Header="MyLabel" />

2

বাস্তব বিষয় দ্বারা পুরানো প্রশ্ন:

HorizontalAlignment="Stretch"

প্রয়োজনীয় জিনিস। জাস্ট নিশ্চিত হন যে আপনি এটি সরিয়েছেন width


1

আমি নিম্নলিখিত ব্যবহার করে একটি স্ট্যাকপ্যানেল একটি পাঠ্যবক্সে পূরণ করতে সক্ষম:

<StackPanel Margin="5,5,5,5">
    <Label Content = "lblExample" Width = "70" Padding="0" HorizontalAlignment="Left"/>
    <TextBox Name = "txtExample" Text = "Example Text" HorizontalContentAlignment="Stretch"/>
</StackPanel>

পাঠ্যবক্সটি অনুভূমিকভাবে স্ট্যাকপ্যানেল পূরণ করছে


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