اگر دقت کرده باید در کد قسمت قبل وقتی براش RadialGradientBrush را به خاصیت Background نسبت می دادیم نوع اشاره ما به براش StaticResource بود، این به چه معنی است ؟
در هنگام اشاره به یک Object که در Resource تعریف شده است،دو نوع طریق اشاره وجود دارد:
- StaticResource :در این نوع درهنگام ساخته شدن پنجره ، Resource یک بار نسبت داده می شود.
- DynamicResource :در این نوع ،در هنگام نیاز شئ درون Resource نسبت داده می شود و در صورت تغییر خصوصیات کنترل های که به آن اشاره می کنند نیز تغییر می کنند .
بگذارید این نوع اشاره ها را با یک مثال بررسی کنیم.در این مثال نوع اشاره دکمه 1 را به DynamicResourceتغییر می دهیم و با کلیک بر روی دکمه 1 رنگ براش RadialGradientBrush تعریف شده در Resource را تغییر می دهیم تا نتیجه را مشاهده کنیم :
<Window.Resources>
<RadialGradientBrush x:Key="btnGRBrush" >
<GradientStop Color="Azure" Offset="0.4"/>
<GradientStop Color="Peru" Offset="0.55"/>
<GradientStop Color="PaleGoldenrod" Offset="1"/>
</RadialGradientBrush>
</Window.Resources>
<StackPanel >
<Button Background="{DynamicResource btnGRBrush}" Margin="5" Click="Button_Click">Button 1</Button>
<Button Margin="5">Button 2</Button>
<Button Background="{StaticResource btnGRBrush}" Margin="5">Button 3</Button>
<Button Margin="5">Button 4</Button>
</StackPanel>
Code Behindبه صورت زیر :
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Resources["btnGRBrush"] = new RadialGradientBrush(Colors.BlanchedAlmond ,Colors.Blue);
}
با اینکار خروجی به صورت زیر تغییر میکند که تفاوت بین DynamicResource و StaticResource به نمایش در می آید.
نکته مهم :توجه داشته باشید که در هنگام استفاده از این نوع اشاره ها دقت کنید چون StaticResourceها در هنگام ساخته شدن فرم ساخته شده و نسبت داده شده می شود ولی DynamicResourceتا هنگام نیاز ساخته نمی شوند.سعی کنید از StaticResource هنگامی استفاده کنید که هیج تغییری در آن ها بوجود نمی آید و از DynamicResource هنگامی که در هنگام اجرا تغییر می کنند (به عنوان مثال از دینامیک برای تنظیمات برنامه ای که با تغییر خصوصیات در همان لحظه تغییر ها اعمال می شوند و از استاتیک ها زمانی که با تغییر تنظیمات برنامه نیاز به ریستارت برنامه برای اعمال تغییر می باشد.) .