This article is currently in the process of being translated into Arabic (~95% done).
The TextBlock control
TextBlock ليس Control ، في حد ذاته ، لأنه لا يرث من control class ، لكنه يستخدم مثل أي control في إطار WPF ، لذلك سوف نطلق عليه control لجعل الأمور بسيطة.
يعتبر TextBlock أحد أهم ال control الأساسية في WPF ، إلا أنه مفيد للغاية. يسمح لك بوضع نص على الشاشة ، نفس عمل ال label ، ولكن بطريقة أبسط وأقل تطلبا من الموارد. والفهم الشائع هو أن label هي للنصوص القصيرة ذات السطر الواحد (ولكنها قد تشمل على سبيل المثال صورة) ، بينما يعمل TextBlock بشكل جيد جدًا للنصوص متعددة الأسطر ، ولكن يمكن أن تحتوي فقط على نص. كل من Label و TextBlock يوفر مزايا فريدة خاصة بهما ، لذا فإن ما يجب أن تستخدمه كثيرًا يعتمد على الحالة.
نحن بالفعل قد استخدمنا TextBlock في مقالة "Hello، WPF!"، ولكن الآن ، دعونا نلقي نظرة على TextBlock في أبسط صورها:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock>This is a TextBlock</TextBlock>
</Grid>
</Window>
هذا بسيط كما لو كنت قد قرأت الفصول السابقة من هذا الدورة ، فلا ينبغي أن يكون هناك شيء جديد. النص بين TextBlock هو ببساطة اختصار لوضع خاصية Text في TextBlock.
في المثال التالي ، لنجرب نصًا أطول لعرض كيف يتعامل TextBlock مع ذلك. لقد أضفت أيضًا القليل من الهامش(Margin) ، لجعله يبدو أفضل قليلاً:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
</Grid>
</Window>
التعامل مع النصوص الطويلة
كما ستدرك قريبًا من لقطة الشاشة ، فإن TextBlock قادر تمامًا على التعامل مع النصوص الطويلة متعددة الأسطر ، ولكنه لن يفعل أي شيء بشكل افتراضي. في هذه الحالة ، يكون النص طويلًا جدًا بحيث لا يمكن عرضه داخل النافذة ، لذا يعرض WPF أكبر قدر ممكن من النص ثم يتوقف.
لحسن الحظ ، هناك عدة طرق للتعامل مع هذا. في المثال التالي ، سأعرض كل هذه الطرق ، ثم سأشرح كل منها بعد ذلك:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="200" Width="250">
<StackPanel>
<TextBlock Margin="10" Foreground="Red">
This is a TextBlock control<LineBreak />
with multiple lines of text.
</TextBlock>
<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
</TextBlock>
<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
</TextBlock>
</StackPanel>
</Window>
لذلك ، لدينا ثلاثة TextBlock، كل منها بلون مختلف (باستخدام خاصية Foreground) للحصول على اسهل نظرة عامة. جميعهم يتعاملون مع محتوى نصهم الطويل جدًا بطرق مختلفة:
TextBlock الاحمر يستخدم LineBreak لكسر السطر يدويًا في مكان معين.وهذا يمنحك التحكم المطلق في المكان الذي تريد النص ان يكون في سطرًا جديدًا ، ولكنه ليس مرنًا جدًا لمعظم الحالات. إذا جعل المستخدم النافذة أكبر ، سيظل النص يلتف في نفس الموضع ، على الرغم من أنه قد يكون هناك مساحة كافية لملاءمة النص بأكمله في سطر واحد.
TextBlock الاخضر يستخدم خاصية TextTrimming مع القيمة CharacterEllipsis لجعل TextBlock تظهر علامة قطع (.. .) عندما لا يمكن احتواء أي نص آخر ال control. هذه طريقة شائعة لإظهار أن هناك المزيد من النص ، ولكن ليس هناك مساحة كافية لإظهاره. هذا شيء رائع عندما يكون لديك نص طويلاً للغاية ، ولكنك لا تريده مطلقًا أن يظهر في أكثر من سطر واحد. كبديل لـ CharacterEllipsis ، يمكنك استخدام WordEllipsis ، والتي ستقوم بتقليم النص في نهاية آخر كلمة ممكنة بدلاً من آخر حرف ممكن ، مما يمنع من ظهور جزء فقط من الكلمة.
TextBlock الازرق يستخدم الخاصية TextWrapping مع قيمة Wrap، لجعل التفاف TextBlock إلى السطر التالي عندما لا يمكن احتواء النص في السطر السابق. وخلافا لTextBlock الأول، حيث اننا نحدد يدويا مكان التفاف النص، وهذا يحدث تلقائي تماما، وحتى بشكل أفضل: انها أيضا تتعدل تلقائيا بمجرد TextBlock يحصل على مساحة أكثر أو أقل . جرِّب جعل النافذة في المثال أكبر أو أصغر وستلاحظ كيف تم تحديث الالتفاف حسب الحالة.
كان هذا كل شيء عن التعامل مع النصوص البسيطة في TextBlock. في الفصل التالي ، سننظر إلى بعض الوظائف المتقدمة في TextBlock ، والتي تتيح لنا إنشاء نص من أنماط متعددة داخل TextBlock وأكثر من ذلك بكثير.