ডাব্লুপিএফ পাঠ্যব্লকটিতে উল্লম্ব সারিবদ্ধ পাঠ্য


228

আমি কোনও পাঠ্যব্লকের অভ্যন্তরে পাঠ্যে উল্লম্ব কেন্দ্রের সারিবদ্ধকরণ কীভাবে বরাদ্দ করব? আমি টেক্সটএলাইনমেন্ট সম্পত্তি পেয়েছি তবে এটি অনুভূমিক পাঠ্য সারিবদ্ধকরণের জন্য। আমি উল্লম্ব পাঠ্য সারিবদ্ধকরণের জন্য এটি কীভাবে করব?


@ এসআর এবং অন্যান্য: নোট করুন যে TextAlignmentকেবল অনুভূমিক প্রান্তিককরণকে প্রভাবিত করে, উল্লম্ব সারিবদ্ধকরণ নয় (প্রশ্নটি বোঝায় হিসাবে)।
ড্রয় নোকস

উত্তর:


284

একটি পাঠ্যবন্ধ নিজেই উল্লম্ব সারিবদ্ধতা করতে পারে না

আমি খুঁজে পেয়েছি এটি করার সর্বোত্তম উপায় হ'ল পাঠ্যরূপটি একটি সীমানার ভিতরে রাখা, যাতে সীমানাটি আপনার জন্য প্রান্তিককরণ করে।

<Border BorderBrush="{x:Null}" Height="50">
    <TextBlock TextWrapping="Wrap" Text="Some Text" VerticalAlignment="Center"/>
</Border>

দ্রষ্টব্য: এটি কার্যত গ্রিড ব্যবহারের সমতুল্য, এটি নির্ভর করে আপনি কীভাবে নিয়ন্ত্রণগুলি আপনার বাকী লেআউটের সাথে ফিট করতে চান তবে কোনটি আরও উপযুক্ত is


22
উল্লম্ব সারিবদ্ধকরণ কার্যকর হওয়ার জন্য +1 সীমানার উচ্চতা নির্ধারণ করতে হবে।
টিম লয়েড

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

20
@ গ্যাভ - টেক্সটএলাইনমেন্টটি কেবল অনুভূমিক প্রান্তিককরণ করে ... প্রশ্নটি উল্লম্ব সারিবদ্ধতা সম্পর্কে
অরিয়ন এডওয়ার্ডস

@ টিমলয়েড - আমি নিশ্চিত নই যে এটি সর্বদা সত্য। আমি এই সেট আপটি পেয়েছি, সীমানার উচ্চতা "অটো" রয়েছে এবং এটি ঠিকঠাকভাবে কাজ করছে। এটি তারকাচিহ্নিত সারির উচ্চতা (এবং সারির অন্যান্য জিনিস) সহ একটি গ্রিড ঘরে রয়েছে।
বব সমার্স

97

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

<TextBlock Height="22" Padding="3" />

11
আমি মনে করি এটি সবচেয়ে উজ্জ্বল উত্তর।
Boppity Bop

1
এটি কেবল তখনই কাজ করে যদি ফন্টটির আকার 16px না করে !?
সি

1
গৃহীত উত্তরটি পাঠ্যবক্সের প্রকৃত সীমানাকে যথাক্রমে উল্লম্বভাবে সারিবদ্ধ করবে, তবে এর ভিতরে থাকা প্রকৃত পাঠ্যের উপর এর কোনও প্রভাব আছে বলে মনে হচ্ছে না ... যা আমি নিশ্চিত যে ওপি'র অভিপ্রায়। এই সমাধানটি একটি সঠিক টেক্সটবার্টিক্যালালাইমেন্ট সম্পত্তি হিসাবে পরিবর্তিত হয়ে কাজ করে এবং আমার উত্সাহ লাভ করে। :)
ট্রেককি

ব্লকের মধ্যে গতিশীল সামগ্রী সম্পর্কে কী, 2 বা 5 লাইনের জন্য আলাদা প্যাডিং প্রয়োজন হবে না, এছাড়াও 10pt বনাম 24pt ফন্টগুলি হবে
রিহেরিক

57

টেক্সটব্লক উল্লম্ব পাঠ্য প্রান্তিককরণ সমর্থন করে না।

আমি গ্রিডের সাহায্যে পাঠ্য ব্লকটি মোড়ানো এবং HorizontalAlignment = "স্ট্রেচ" এবং উল্লম্বআলাইনমেন্ট = "কেন্দ্র" সেট করে এটিকে ঘিরে কাজ করি।

এটার মত:

<Grid>
    <TextBlock 
        HorizontalAlignment="Stretch"
        VerticalAlignment="Center"
        Text="Your text" />
</Grid>

সীমানা-ভিত্তিক পদ্ধতির মতো, গ্রিডের জন্যও উচ্চতা নির্ধারণ করার প্রয়োজন নেই।
এফরান কোবিসি

আমি এই পদ্ধতির আমার পক্ষে সবচেয়ে ভাল কাজ করে। আমি TextBlockএ এর Ellipseভিতরে ওভারলে করে গতিশীল সূচক লাইট তৈরি করছি Grid। আমার প্রস্থ এবং উচ্চতার বৈশিষ্ট্যগুলি আবদ্ধ করার বা কৌশলপূর্ণ কিছু করার দরকার নেই।
ধান 20

17

আপনি টেক্সটব্লকের পরিবর্তে লেবেল ব্যবহার করতে পারেন।

<Label Content="Hello, World!">
    <Label.LayoutTransform>
        <RotateTransform Angle="270"/>
    </Label.LayoutTransform>
</Label>

3
দুর্দান্ত, লেবেলের ভার্টিকাল কনটেন্টএলাইনমেন্ট রয়েছে। Greeeat। +1
ইগনাসিও সোলার গার্সিয়া

3
ওপিকে কোনও টেক্সটব্লক ব্যবহার করার প্রয়োজন ছিল বা কোনও লেবেল নিয়ে পালাতে পারে কিনা তা পরিষ্কার নয়। একটি লেবেল ব্যবহার করা আমার প্রয়োজনের জন্য কাজ করেছিল। +1
স্টিভ ক্যালেমকিউইকস

19
এটি উল্লম্ব প্রান্তিককরণ কীভাবে প্রয়োগ করতে হয় না, উল্লম্ব পাঠ্য কীভাবে উত্পাদন করতে হয় তার প্রশ্নের উত্তর দেয়!
সেবাস্তিয়ান নেগ্রাসজাস

26
এই প্রশ্নটি মেটাতে
জিজ্ঞাসা

6

আপনি যদি পাঠ্য মোড়ানো ব্যতিরেকে করতে পারেন তবে আমি মনে করি যে পাঠ্যব্লককে একটি লেবেলের সাথে প্রতিস্থাপন করা এটি করার সবচেয়ে সার্থক উপায়। অন্যথায় অন্য একটি বৈধ উত্তর অনুসরণ করুন।

<Label Content="Some Text" VerticalAlignment="Center"/>

6

TextBlockএর সামগ্রীতে উল্লম্ব সারিবদ্ধতা সমর্থন করে না। আপনি অবশ্যই ব্যবহার করুনTextBlock তবে আপনাকে এটির পিতামাতার সাথে সম্মান সহ প্রান্তিককরণ করতে হবে।

তবে আপনি যদি এর Labelপরিবর্তে ব্যবহার করতে পারেন (এবং তাদের মধ্যে খুব অনুরূপ কার্যকারিতা রয়েছে) তবে আপনি পাঠ্য সামগ্রীটি অবস্থান করতে পারেন :

<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
   I am centred text!
</Label>

Labelডিফল্টরূপে তার সীমা পূরণ করতে প্রসারিত, যার অর্থ লেবেলের টেক্সট কেন্দ্রিক করা হবে।


3

আমার জন্য, VerticalAlignment="Center"এই সমস্যাটি সমাধান করুন।
এটি TextBlockগ্রিডে আবৃত হওয়ার কারণে এটি হতে পারে তবে ডাব্লুপিএফ-তে প্রায় সমস্ত জিনিসই তাই।


1

আমি দেখতে পেয়েছি যে পাঠ্যবাক্স শৈলীর (যেমন controltemplate:) সংশোধন করা এবং তারপরে PART_ContentHostকেন্দ্রের উল্লম্ব সারিবদ্ধকরণটি কৌশলটি সম্পাদন করবে


ওপি পাঠ্যব্লকগুলি সম্পর্কে জিজ্ঞাসা করছে। তাদের কন্ট্রোলটেমলেট নেই have
এভিনিস

1

কেবল গিগলসের জন্য, এই এক্সএএমএলকে ঘূর্ণি দিন। এটি 'অ্যালাইনমেন্ট' না হওয়ায় এটি নিখুঁত নয় তবে এটি আপনাকে অনুচ্ছেদের মধ্যে পাঠ্য প্রান্তিককরণ সামঞ্জস্য করতে দেয়।

<TextBlock>
    <TextBlock BaselineOffset="30">One</TextBlock>
    <TextBlock BaselineOffset="20">Two</TextBlock>  
    <Run>Three</Run>            
    <Run BaselineAlignment="Subscript">Four</Run>   
</TextBlock>

1

আপনি যদি টেক্সটব্লকের উচ্চতা উপেক্ষা করতে পারেন তবে এটি ব্যবহার করা আপনার পক্ষে ভাল:

<TextBlock Height="{Binding}" Text="Your text"
TextWrapping="Wrap" VerticalAlignment="Center" Width="28"/>

1

আমার ক্ষেত্রে, আমি TextBlockপ্রদর্শনটি আরও সুন্দর করার জন্য এটি করেছি ।

<Border BorderThickness="3" BorderBrush="Yellow" CornerRadius="10" Padding="2"
    HorizontalAlignment="Center" VerticalAlignment="Center" Height="30" Width="150">
        <TextBlock FontSize="20" Height="23" HorizontalAlignment="Left" Margin="0,0,0,-5" Text="" VerticalAlignment="Top" Width="141" Background="White" />
</Border>

নীচে থেকে আরও টেক্সটটি তৈরি করার কৌশলটি সেট করা আছে

Margin="0,0,0,-5"

0

আপনি আমার ব্লগ পোস্ট দেখতে পারেন। আপনি কোডবিহাইন্ড থেকে টেক্সটব্লকের কাস্টম উচ্চতা সেট করতে পারেন। কাস্টম উচ্চতা নির্ধারণের জন্য আপনাকে এটিকে একটি সীমানা বা স্ট্যাকপ্যানেলে স্থাপন করতে হবে

http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html


0

আমি খুঁজে পেয়েছি এটি কিছুটা আলাদা করতে হয়েছিল। আমার সমস্যাটি হ'ল যদি আমি ফন্টের আকারটি পরিবর্তন করি তবে টেক্সটবক্সে টেক্সট বাক্সটিতে বাকী লাইনে থাকা টেক্সটবক্সের সাথে নীচে না থেকে টেক্সটটি উপরে চলে যাবে। উপরে থেকে নীচে পর্যন্ত প্রান্তিক সারিবদ্ধ পরিবর্তন করে আমি প্রোগ্রামের আকারে 20 থেকে আকার 14 এবং পিছনে ফন্টটি পরিবর্তন করতে সক্ষম হয়েছি, নীচে পাঠ্যের অভিক্যতা রেখে এবং জিনিসগুলি পরিষ্কার রাখছি। এখানে কীভাবে:

এখানে চিত্র বর্ণনা লিখুন


0

উল্লম্বভাবে একক লাইন পাঠ্যবক্স প্রান্তিক করা।

@ অরিওন এডওয়ার্ডস দ্বারা প্রদত্ত উত্তরের প্রসারিত করতে, আপনি কোড-ব্যাক (সম্পূর্ণ কোনও স্টাইল সেট নেই) থেকে সম্পূর্ণভাবে এটি করবেন। মূলত বর্ডার থেকে উত্তরাধিকারসূত্রে একটি কাস্টম ক্লাস তৈরি করুন যার সন্তানের একটি পাঠ্যবক্সে সেট করা আছে। নীচের উদাহরণটি ধরে নেওয়া হয়েছে যে আপনি কেবল একটি একক লাইন চান এবং সীমান্তটি একটি ক্যানভাসের সন্তান। এছাড়াও ধরে নিয়েছে যে সীমানার প্রস্থের ভিত্তিতে আপনাকে টেক্সটবক্সের ম্যাক্সেলংয়ের সম্পত্তিটি সামঞ্জস্য করতে হবে। নীচের উদাহরণটিও 'IBeam' টাইপ করে একটি পাঠ্যবক্সের নকল করতে সীমানার কার্সারটি সেট করে। '3' এর একটি মার্জিন সেট করা হয়েছে যাতে পাঠ্যবক্সটি সীমান্তের বামে একেবারে প্রান্তিক না হয়।

double __dX = 20;
double __dY = 180;
double __dW = 500;
double __dH = 40;
int __iMaxLen = 100;

this.m_Z3r0_TextBox_Description = new CZ3r0_TextBox(__dX, __dY, __dW, __dH, __iMaxLen, TextAlignment.Left);
this.Children.Add(this.m_Z3r0_TextBox_Description);

ক্লাস:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;


namespace ifn0tz3r0Exp
{
    class CZ3r0_TextBox : Border
    {
        private TextBox m_TextBox;

        private SolidColorBrush m_Brush_Green = new SolidColorBrush(Colors.MediumSpringGreen);
        private SolidColorBrush m_Brush_Black = new SolidColorBrush(Colors.Black);
        private SolidColorBrush m_Brush_Transparent = new SolidColorBrush(Colors.Transparent);

        public CZ3r0_TextBox(double _dX, double _dY, double _dW, double _dH, int _iMaxLen, TextAlignment _Align)
        {

            /////////////////////////////////////////////////////////////
            //TEXTBOX
            this.m_TextBox = new TextBox();
            this.m_TextBox.Text = "This is a vertically centered one-line textbox embedded in a border...";
            Canvas.SetLeft(this, _dX);
            Canvas.SetTop(this, _dY);
            this.m_TextBox.FontFamily = new FontFamily("Consolas");
            this.m_TextBox.FontSize = 11;
            this.m_TextBox.Background = this.m_Brush_Black;
            this.m_TextBox.Foreground = this.m_Brush_Green;
            this.m_TextBox.BorderBrush = this.m_Brush_Transparent;
            this.m_TextBox.BorderThickness = new Thickness(0.0);
            this.m_TextBox.Width = _dW;
            this.m_TextBox.MaxLength = _iMaxLen;
            this.m_TextBox.TextAlignment = _Align;
            this.m_TextBox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
            this.m_TextBox.FocusVisualStyle = null;
            this.m_TextBox.Margin = new Thickness(3.0);
            this.m_TextBox.CaretBrush = this.m_Brush_Green;
            this.m_TextBox.SelectionBrush = this.m_Brush_Green;
            this.m_TextBox.SelectionOpacity = 0.3;

            this.m_TextBox.GotFocus += this.CZ3r0_TextBox_GotFocus;
            this.m_TextBox.LostFocus += this.CZ3r0_TextBox_LostFocus;
            /////////////////////////////////////////////////////////////
            //BORDER

            this.BorderBrush = this.m_Brush_Transparent;
            this.BorderThickness = new Thickness(1.0);
            this.Background = this.m_Brush_Black;            
            this.Height = _dH;
            this.Child = this.m_TextBox;
            this.FocusVisualStyle = null;
            this.MouseDown += this.CZ3r0_TextBox_MouseDown;
            this.Cursor = Cursors.IBeam;
            /////////////////////////////////////////////////////////////
        }
        private void CZ3r0_TextBox_MouseDown(object _Sender, MouseEventArgs e)
        {
            this.m_TextBox.Focus();
        }
        private void CZ3r0_TextBox_GotFocus(object _Sender, RoutedEventArgs e)
        {
            this.BorderBrush = this.m_Brush_Green;
        }
        private void CZ3r0_TextBox_LostFocus(object _Sender, RoutedEventArgs e)
        {
            this.BorderBrush = this.m_Brush_Transparent;
        }
    }
}

0

আমার মনে হয় একটি লেবেলে কোনও লেবেল (বা টেক্সটলক) ব্যবহার করা ভাল, আপনি সীমান্ত নিয়ন্ত্রণে মাউস ইভেন্টটি সরাসরি সংযুক্ত করতে পারবেন না, শেষ পর্যন্ত এটি টেক্সটব্লকের সাথে সংযুক্ত থাকে, এটি আমার পুনঃব্যবস্থাপনা:

<Label 
    Height="32"
    VerticalContentAlignment="Center"
    HorizontalContentAlignment="Stretch"
    MouseLeftButtonUp="MenuItem_MouseLeftButtonUp">
    <TextBlock Padding="32 0 10 0">
        Label with click event
    </TextBlock>
</Label>

0

আমি মনে করি যে কোনও প্রান্তে বা পটভূমি ছাড়াই একটি পাঠ্যবাক্সটি কেন্দ্রে বিন্যস্ত পাঠ্যবন্ধকে কেন্দ্র করে পৌঁছানোর সহজ এবং দ্রুত উপায় হিসাবে ব্যবহার করা বুদ্ধিমানের কাজ

<TextBox
TextWrapping="Wrap"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Background="{x:Null}"
BorderBrush="{x:Null}"
/>

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