This article is currently in the process of being translated into Persian (~99% done).
Introduction to WPF styles
اگر از دنیای توسعهی وب به کمک HTML و CSS پا به عرصهی یادگیری WPF گذاشتهاید حتماً به سرعت متوجه شباهت XAML با HTML خواهید شد: در اینجا نیز با استفاده از تگها، طرحبندی ساختیافتهای برای برنامه تعریف میکنید. درست مشابه با تعیین استایل وبسایت خود توسط تگهای HTML، در XAML میتوانید به کمک مقداردهی به خاصیتهایی همچون Foreground، FontSize و ... ظاهر المانها را به صورت دلخواه تغییر دهید.
اما زمانی که میخواهید دقیقاً اندازهی متن و رنگ یکسانی را در سه کنترل TextBlock مختلف داشته باشید، چه اتفاقی میافتد؟ میتوانید برای هریک از این سه کنترل، خاصیتهای دلخواهتان را کپی کنید اما اگر بجای این سه کنترل، 50 کنترل با ظاهر یکسان در پنجرههای متعدد برنامه بخواهید چطور؟ یا اگر ناگهان متوجه شوید که اندازهی متن باید بجای 12، 14 باشد چه میکنید؟
WPF استایلبندی را در اختیار میگذارد، چیزی که نسبت آن به XAML مثل نسبت CSS است به HTML. با استفاده از استایلها، میتوانید خاصیتهای دلخواه خود را در یک گروه قرار داده و آنها را به کنترلهایی خاص یا تمام کنترلها از نوعی خاص نسبت دهید. همچنین، درست مشابه با CSS، یک استایل میتواند از استایل دیگری ارثبری کند.
مثال سادهای از استایلها
بعداً مفصلاً در مورد جزئیات تعاریف استایل صحبت خواهیم کرد. اما صرفاً جهت معرفی، میخواهم مثالی از یک استایل بسیار ساده را به شما نشان دهم تا ببینید که چطور میتوان آنها را بکار برد:
<Window x:Class="WpfTutorialSamples.Styles.SimpleStyleSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SimpleStyleSample" Height="200" Width="250">
<StackPanel Margin="10">
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Gray" />
<Setter Property="FontSize" Value="24" />
</Style>
</StackPanel.Resources>
<TextBlock>Header 1</TextBlock>
<TextBlock>Header 2</TextBlock>
<TextBlock Foreground="Blue">Header 3</TextBlock>
</StackPanel>
</Window>
در قسمت منابع این StackPanel یک Style تعریف میکنیم. به کمک خاصیت TargetType به WPF میگوییم که این استایل میبایست بر روی همهی کنترلهای از نوع TextBlock که در این حوزه (Scope) قرار گرفتهاند (یعنی داخل StackPanel) اعمال شود. سپس، دو المان گذارنده به استایل اضافه میکنیم. المانهای گذارنده برای نسبت دادن مقداری خاص به خاصیتهای کنترل مورد نظر ما به کار میروند. در این مثال، خاصیتهای Foreground و FontSize مد نظر قرار گرفتهاند. خاصیت Property در گذارنده به WPF میگوید که کدام خاصیت مد نظر ماست. همچنین، خاصیت Value تعیین میکند که چه مقداری میخواهیم به خاصیت دلخواه خود نسبت دهیم.
توجه کنید که رنگ آخرین TextBlock بجای خاکستری، آبی است. من آن را آبی کردم تا به شما نشان دهم که درحالیکه یک کنترل میتواند از یک استایل خاص بهره ببرد، همچنان میتوانید آزادانه مقادیر جدید دلخواهی را به آن نسبت دهید — مقادیری که برای یک کنترل در همان جا تعریف میکنید به مقادیر معین شده توسط استایلها اولویت دارند.
خلاصه
استایلهای WPF فرآیند ساختن یک ظاهر خاص و بکارگیری آن برای چندین کنترل را بسیار ساده میکنند. این نخستین مثال بسیار جزئی بود، لیکن در فصلهای آتی به شما نشان خواهم داد که چگونه میتوانید استایلهای عمومی تعریف کنید.