دوستان و علاقمندان به مباحث WPF وقتتون بخیر. با آموزش WPF از وب سایت آموزشی پی وی لرن همراهتون هستیم. بررسی Resources یا منابع در WPF را در این بخش از آموزش خواهیم داشت. در ادامه با ما همراه باشید.
منابع (Resource) معمولاً تعاریفی هستند که با برخی از اشیایی ارتباط دارند که پیش بینی می کنید بیش تر از یک بار از آن ها استفاده کنید. این امکان ذخیره داده به صورت محلی برای کنترل ها یا پنجره فعلی یا در سطح عمومی برای کل برنامه ها است.
تعریف یک شی به عنوان یک منبع به ما اجازه می دهد تا از جای دیگری به آن دسترسی پیدا کنیم. به این معنی است که می توان از شی استفاده مجدد کرد. Resources در دیکشنری منابع تعریف شده اند و هر شیئی را می توان به عنوان منبعی تعریف کرد که آن را به عنوان یک دارایی قابل اشتراک تبدیل می کند. یک کلید منحصر به فرد و یونیک برای یک منبع XAML مشخص شده است و با استفاده از یک برنامه افزودنی نشانه گذاری StaticResource می توان به آن اشاره کرد.
منابع می توانند از دو نوع باشند.
StaticResource یک جستجوی onetime (یک بار) است ، در حالی که یک DynamicResource بیش تر شبیه به اتصال داده (data binding) است. به یاد می آورد که یک خاصیت با یک کلید منبع خاص همراه است. اگر شیء مرتبط با آن کلید تغییر کند ، منبع پویا خاصیت هدف را به روز می کند.
مثال
در این جا یک برنامه ساده برای منابع SolidColorBrush آورده شده است.
بیایید یک پروژه WPF جدید با نام WPFResouces ایجاد کنیم.
دو مستطیل بکشید و خصوصیات آن ها را مطابق با کد XAML زیر نشان دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <Window x:Class = "WPFResources.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPFResources" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525"> <Window.Resources> <SolidColorBrush x:Key = "brushResource" Color = "Blue" /> </Window.Resources> <StackPanel> <Rectangle Height = "50" Margin = "20" Fill = "{StaticResource brushResource}" /> <Rectangle Height = "50" Margin = "20" Fill = "{DynamicResource brushResource}" /> <Button x:Name = "changeResourceButton" Content = "_Change Resource" Click = "changeResourceButton_Click" /> </StackPanel> </Window> |
در کد XAML فوق می بینید که یک مستطیل دارای StaticResource و دیگری دارای DynamicResource و رنگ brushResource Bisque است.
وقتی کد را کامپایل و اجرا می کنید ، MainWindow زیر را تولید می کند.
با کلیک بر روی دکمه “Change Resource” ، می بینید که مستطیل با DynamicResource رنگ خود را به Red تغییر می دهد.
منابع در دیکشنری منابع تعریف شده اند ، اما مکان های بی شماری وجود دارد که یک دیکشنری منابع را می توان تعریف کرد. در مثال بالا ، یک دیکشنری منبع در سطح Window / page تعریف شده است. در آن چه که دیکشنری یک منبع تعریف شده است ، بلافاصله دامنه آن منبع را محدود می کند. بنابراین دامنه ، یعنی جایی که می توانید از منابع استفاده کنید بستگی به جایی دارد که شما آن را تعریف کرده باشید.
در مورد دامنه منابع ، بیش ترین سطح برنامه ، سطح صفحه و سطح عنصر خاص مانند Grid ، StackPanel و غیره است.
برنامه فوق دارای منابع در سطح Window / page است.
منابع دیکشنری در برنامه های XAML نشان می دهد که دیکشنری منابع در فایل های جداگانه نگه داری می شوند. تقریباً در تمام برنامه های XAML دنبال می شود. تعریف منابع در فایل های جداگانه می تواند مزایای زیر را داشته باشد.
بنابراین ، حال چگونه می توان منابع خود را در یک دیکشنری منابع در یک فایل جداگانه تعریف می کنیم؟ خوب ، این کار بسیار آسان است ، فقط با استفاده از مراحل زیر در Visual Studio یک دیکشنری منبع جدید می توانید اضافه کنید.
بیایید همین مثال را بیاوریم ، اما در این جا ، دیکشنری منابع را در سطح برنامه تعریف خواهیم کرد. کد XAML برای MainWindow.xaml به شرح زیر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Window x:Class = "WPFResources.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPFResources" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525"> <StackPanel> <Rectangle Height = "50" Margin = "20" Fill = "{StaticResource brushResource}" /> <Rectangle Height = "50" Margin = "20" Fill = "{DynamicResource brushResource}" /> <Button x:Name = "changeResourceButton" Content = "_Change Resource" Click = "changeResourceButton_Click" /> </StackPanel> </Window> |
در این جا پیاده سازی در DictionaryWithBrush.xaml می باشد.
1 2 3 4 5 | <ResourceDictionary xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush x:Key = "brushResource" Color = "Blue" /> </ResourceDictionary> |
در این جا پیاده سازی در app.xaml می باشد.
1 2 3 4 5 6 7 8 9 10 | <Application x:Class="WPFResources.App" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" StartupUri = "MainWindow.xaml"> <Application.Resources> <ResourceDictionary Source = " XAMLResources\ResourceDictionaries\DictionaryWithBrush.xaml"/> </Application.Resources> </Application> |
هنگامی که کد فوق کامپایل و اجرا می شود، خروجی زیر را تولید می کند.
وقتی دکمه Change Resource را بزنید ، مستطیل رنگش را به Red تغییر می دهد.
توصیه می کنیم که کد فوق را اجرا کرده و منابع بیش تری را امتحان کنید (مثلاً رنگ پس زمینه).
بررسی Resources یا منابع در WPF را در این بخش از آموزش wpf دنبال نمودیم. در ادامه ی جلسات به بررسی Templates خواهیم پرداخت. دوستان با ما همراه باشید.