StaticResource və WPF-də DynamicResource arasındakı fərq nədir?

WPF-də fırçalar, şablonlar və üslublar kimi resurslardan istifadə edərkən, onları StaticResources

 <Rectangle Fill="{StaticResource MyBrush}" /> 

və ya DynamicResource kimi

 <ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" /> 

Çox hallarda (həmişə?), Yalnız bir iş, digərində isə istisna iş vaxtında yaranacaq. Amma niyə bilmək istərdim:

  • Əsas fərq nədir. Yaddaş və ya performansın təsiri kimi.
  • WPF qaydaları varmı, "fırçalar daima statikdir" və "nümunələr hər zaman dinamikdir" və s.

Mən statik vs Dinamik arasında seçim seçdiyim kimi özbaşına deyil, amma şablonları görmürəm.

385
14 окт. Isak Savo 14 oct üçün müəyyən edilir . 2008-10-14 14:54 '08 at 2:54 pm 2008-10-14 14:54
@ 12 cavab

Bir StaticResource etkinleştirilecek ve uygulamaya başlamadan əvvəl gerçekleşen XAML yüklemesi esnasında bu özelliğe atanır . Yalnız bir dəfə təyin olunacaq və resurs lüğətində dəyişikliklər nəzərə alınmır.

A DynamicResource yüklənmə vaxtında bir obyektə bir İfadə obyekti təyin edir, lakin bir Expression obyektinin xərc tələb olunduğunda, həqiqətən, işə başlamazdan əvvəl bir qayda üçün axtarış etməyəcəkdir. Bu, iş zamanı istənilənədək resurs axtarışını qorumur. Yaxşı bir nümunə XAML-də daha sonra müəyyən edilmiş bir qayda üçün birbaşa əlaqədir. Başqa bir nümunə icra etmədən əvvəl mövcud olmayacaq bir qaynaqdır. Kaynak kaynak lüğəti dəyişdirildiyi təqdirdə hədəf yenilənəcəkdir.

384
14 окт. Phil Wright tərəfindən Oct 14 verdiyi cavab 2008-10-14 15:04 '08 at 15:04 2008-10-14 15:04

Mən də qarışdım. Aşağıdakı nümunəyə baxın:

 <Window x:Class="WpfApplicationWPF.CommandsWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CommandsWindow" Height="300" Width="300"> <StackPanel> <Button Name="ButtonNew" Click="ButtonNew_Click" Background="{DynamicResource PinkBrush}">NEW</Button> <Image Name="ImageNew" Source="pack://application:,,,/images/winter.jpg"></Image> </StackPanel> <Window.Background> <DynamicResource ResourceKey="PinkBrush"></DynamicResource> </Window.Background> </Window> 

Burada düyməni və pəncərə üçün dinamik bir qaynaq istifadə etdim və onu heç bir yerdə elan etməmişdim. Çalışma zamanında, ResourceDictionary ierarxiyası yoxlanılacaq. Mən bunu tanımadığımdan bəri varsanılanın istifadə ediləcəyini düşünürəm.

Bir DynamicResource istifadə etdikləri üçün Button olayını tıklatmak üçün aşağıdakı kodu əlavə etsəniz, arka plan müvafiq olaraq güncellenecektir.

border=0
 private void ButtonNew_Click(object sender, RoutedEventArgs e) { this.Resources.Add( "PinkBrush" ,new SolidColorBrush(SystemColors.DesktopColor) ); } 

StaticResource istifadə etdikləri təqdirdə:

  • Resurs XAML-də elan edilməlidir
  • Və bu da "əvvəllər" istifadə olunur.

Ümid edirəm bir az utanıram.

100
30 дек. Cavab Akshay J tərəfindən verilir 30 dekabr. 2010-12-30 06:26 '11 saat 06:26 'da 2010-12-30 06:26

StatikResource obyektin qurulması zamanı aktiv olacaq.
DynamicResource qiymətləndirmə və nəzarət hər bir resurs bir resurs lazımdır həll olunacaq.

25
26 дек. Cavab 26 dekabr Afshin verilir . 2010-12-26 05:23 '10 saat 05:23 'da 2010-12-26 05:23

Mantıksal qaynaqlar XAML-də əyani ağacın bir hissəsi olmayan obyektləri müəyyən etməyə imkan verir, ancaq istifadəçi interfeyinizdə istifadə edilə bilər. Mantıksal bir qaynaq nümunəsi bir rəng sxemi təmin etmək üçün istifadə edilən Fırça'dır. Tipik olaraq, bu obyektlər bir neçə tətbiq elementi tərəfindən istifadə olunan resurslar kimi müəyyən edilir.

 <Window.Resources> <RadialGradientBrush x:Key="myGradientBrush"> <GradientStop Color="Green" Offset="0"/> <GradientStop Color="Blue" Offset="2"/> </RadialGradientBrush> </Window.Resources> 

İndi yuxarıda göstərilən məlumatlar statik və ya dinamik bir qayda olaraq istifadə edilə bilər. Unutmayın ki, statik resursları istifadə edərkən, əvvəl təyin edilə bilər əvvəl XAML kodu ilə müəyyən edilməlidir. Statik və dinamik resurslar kimi istifadə edilə bilər:

 <Grid Background="{StaticResource myGradientBrush}"></Grid> 

və ya

 <Grid Background="{DynamicResource myGradientBrush}"></Grid> 

StaticResource və DynamicResource arasındakı fərq, resursların link elementləri tərəfindən necə çıxarıldığıdır. StaticResource bir istinad elementi ilə yalnız bir dəfə alınır və resursun resursları boyunca istifadə olunur. Digər tərəfdən DynamicResource, istinad obyektindən hər dəfə istifadə edildikdə əldə edilir.

RadialGradientBrush rəng mülkiyyətinin kodda narıncı və çəhrayı rəngdə dəyişdiyini asanlaşdırmaq, sonra resurs DynamicResource kimi istifadə edildikdə yalnız elementləri əks etdirir. Aşağıdakı kodu qayda dəyişdirmək üçün kod:

 RadialGradientBrush radialGradientBrush = new RadialGradientBrush(Colors.Orange, Colors.Pink); this.Resources["myGradientBrush"] = radialGradientBrush; 

DynamicResource-nun dezavantajı tətbiqin performansını azaldır, çünki resurslar hər dəfə istifadə edilər. Ən yaxşı təcrübə, DynamicResource istifadə üçün xüsusi bir səbəbə qədər StaticResource istifadə etməkdir.

Mənbə:
WPF: StaticResource və DynamicResource

23
09 нояб. Cavab lasitha edirisooriya 09 noyabr. 2012-11-09 08:50 '12 at 8:50 2012-11-09 08:50
  • StaticResource ilk dəyərdən istifadə edir. DynamicResource son dəyəri istifadə edir.
  • DynamicResource daxili bir stil üçün istifadə edilə bilər, StaticResource bilməz.

Bu iç içə stil lüğəti olduğunuzu düşünürəm. LightGreen kök səviyyəsindədir və Pink Grid içindədir.

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style TargetType="{x:Type Grid}"> <Style.Resources> <Style TargetType="{x:Type Button}" x:Key="ConflictButton"> <Setter Property="Background" Value="Pink"/> </Style> </Style.Resources> </Style> <Style TargetType="{x:Type Button}" x:Key="ConflictButton"> <Setter Property="Background" Value="LightGreen"/> </Style> </ResourceDictionary> 

Görən:

 <Window x:Class="WpfStyleDemo.ConflictingStyleWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ConflictingStyleWindow" Height="100" Width="100"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Styles/ConflictingStyle.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid> <Button Style="{DynamicResource ConflictButton}" Content="Test"/> </Grid> </Window> 

StaticResource düyməni LightGreen kimi göstərir, bu da üslubda tapdığı ilk dəyərdir. DynamicResource, LightGreen düyməsini grid göründüyü kimi çəhrayı kimi əvəz edəcək.

2019

17
27 апр. Martın 27-də Jeson Martajaya tərəfindən verilmiş cavab 2015-04-27 21:10 '15 at 9:10 pm 2015-04-27 21:10

Əsas fərq nədir. Yaddaş və ya performansın nəticələri kimi

Statik və dinamik resurslar arasındakı fərq, əsas obyekt dəyişdikdə baş verir. Kaynakların toplanmasında tanımladığınız Fırça kodunuzda bulunuyorsa və nesnenin başqa bir örneğine ayarlanmışsa, Dikdörtgen bu değişikliği algılamaz.

Statik qaynaqlar bir elementə istinad edərək bir qaynaq resursu üçün istifadə edilərək alınır. DynamicResources istifadə etdikləri hər dəfə çıxarılıb.

Dinamik resursların dezavantajı tətbiqi performansının azaldılmasıdır.

WPF qaydaları varmı, "fırçalar daima statikdir" və "nümunələr hər zaman dinamikdir" və s.

Ən yaxşı təcrübə, dinamik bir dildə dinamik olaraq dəyişdirmək istədiyiniz bir səbəb olmasa, statik resurslardan istifadə etməkdir. Dynamic resorption istifadə etmək istədiyiniz bir nümunənin başqa bir nümunəsi SystemBrushes, SystenFonts və sistem parametrlərinin istifadəsidir.

12
30 марта '13 в 4:58 2013-03-30 04:58 Cavab CharithJ tərəfindən 30 Mart 'da 4:58' də verilir 2013-03-30 04:58

Bütün cavabları faydalı tapdınız, yalnız başqa bir istifadə vəziyyətini əlavə etmək istədi.

Kompozit WPF skriptində, istifadəçi nəzarətiniz, bu qaynağa DynamicResource kimi istinad edərək, hər hansı digər valideyn pəncərə / nəzarətdə (bu istifadəçi nəzarətini verəcək) müəyyən edilmiş resurslardan istifadə edə bilər.

Başqaları tərəfindən qeyd edildiyi kimi, Staticresource kompilyasiya vaxtında yoxlanılacaq. İstifadəçi nəzarəti, hosting / valideyn nəzarəti ilə müəyyənləşdirilmiş resurslara istinad edə bilməz. Bu halda DynamicResource istifadə edə bilərsiniz.

7
24 янв. Cavab 24 Yanvar Maniş Basantani tərəfindən verilir 2014-01-24 13:01 '14 saat 13:01 2014-01-24 13:01

Dinamik resursların əhəmiyyətli bir üstünlüyü

Bir proqramın başlaması çox vaxt tələb edirsə, dinamik resurslardan istifadə etməlisiniz, çünki statik resurslar həmişə bir pəncərə və ya tətbiq yaratdıqda yüklənir və dinamik resurslar ilk dəfə istifadə olunduqda yüklənir.

Lakin, resurs çox böyük və mürəkkəb deyilsə, heç bir fayda görməyəcəksiniz.

3
18 сент. cavab verildi . 2014-09-18 15:34 '14 da 15:34 2014-09-18 15:34

Statik və dinamik resurslar arasında əsas fərqlər aşağıdakılardır:

  • Statik bir qaynaq bir qaynağı yalnız bir dəfə qiymətləndirəcək, dinamik bir qaynaq isə bir qaynaq tələb olunduqda qiymətləndiriləcəkdir.

2. Dinamik bir qaynaq statik resurslara nisbətən daha çox ofis məsafəsini daşıyır, çünki o, istənilən vaxt və ya ehtiyacı olan resursları arar.

Resource 3.Static daha sürətli, ancaq bir dinamik resursdan daha çox bir səhifə və ya pəncərə yükləmək üçün az vaxt tələb olunur, çünki dinamik resurslar onları istifadə edərkən yüklənir.

2
21 апр. cavab Gül Md Erşad tərəfindən verilir 21 Apr 2015-04-21 13:52 '15 at 1:52 pm 2015-04-21 13:52

StaticResource və DynamicResource arasındakı fərq, resursların link elementləri tərəfindən necə çıxarıldığıdır. StaticResource bir istinad elementi ilə yalnız bir dəfə alınır və resursun resursları boyunca istifadə olunur. Digər tərəfdən DynamicResource, istinad obyektindən hər dəfə istifadə edildikdə əldə edilir.

2
20 янв. Cavab 20 Yanvar BKO tərəfindən verilir . 2015-01-20 16:13 '15 at 16:13 2015-01-20 16:13

Statik resurslar bir qaydanı yalnız bir dəfə qiymətləndirir və bundan sonra, resursların dəyişməsi halında, bu dəyişikliklər məcburi şəkildə əks olunmur. Bir qaynaqa ehtiyac duyulduğunda, dinamik əlaqəli qaynaqları qiymətləndirir.

0
14 сент. Cavab İnqa 14 sentyabrda verilir. 2016-09-14 17:36 '16 saat 17:36 'də 2016-09-14 17:36

Dinamik qaynaqlar yalnız təyin olunan əmlak, bir asılılıq obyektindən törədilən və ya statik resursların istənilən yerdə istifadə oluna bilən bir dondurulmuş obyektdə olduğundan istifadə edilə bilər. Statik qaynaqları istifadə edərək, bütün nəzarət sistemini təsvir edə bilərsiniz.

Statik qaynaqlar aşağıdakı hallarda istifadə olunur:

  1.When reaction resource changes at runtime is not required. 2.If you need a good performance with lots of resources. 3.While referencing resources within the same dictionary. Dynamic resources: 1.Value of property or style setter theme is not known untill runtime a. This include system ,aplication,theme based settings b. This also includes forward references. 2.Referencing large resources that may not load when page,windows,usercontrol loads . 3. Referncing theme styles in a custom control. 
0
01 сент. İaminvinicble tərəfindən verilmiş cavab 01 Sep 2016-09-01 07:46 '16 saat 07:46 'də 2016-09-01 07:46

bağlı digər suallar tags və ya bir sual