Here is the difference StaticResource loads at time of loading, this means that the resource key that you are using, must be lexically defined before the usage So, static resource in case of custom control must be defined only above the control definition in the same generic. Xaml file. So if you put your brushes in different xaml, it will certainly not work in case of static resource This is the reason, unless the other resources of type xaml is included in the form of some sort of import at a time of complile in same file, you can not use static resource in the file.It simply means that the file/component/control's actual xaml some how should contain actual reference of static resource you use Now I have my doubt of why DynamicResource will not work, that is because probably DynamicResource will only look in the Application's (where the control is use) ResourceDictionary but not generic.
Xaml I am not 100% sure but I feel if you define a custom control and if you use DynamicResource then your resources has to be in the Application's Resource Dictionary or the parent container of your control's resource dictionary, but it can not be in generic. Xaml Because DynamicResource will only look up for keys in the logical tree of control's runtime and thats why it may not find resources that are in generic. Xaml unless generic.
Xaml is explicitly added in Application. Resources Summary: StaticResource must be available lexically before in the same file at compile time, resources will be available in Application. Resources dictionary, it still can find in logical tree but at a compile time only in the same dll or same generic.
Xaml DynamicResource must will be searched in Application. Resources and in the logical tree of the control at runtime For more reference, please check Resources Overview.
Here is the difference, StaticResource loads at time of loading, this means that the resource key that you are using, must be lexically defined before the usage. So, static resource in case of custom control must be defined only above the control definition in the same generic. Xaml file.So if you put your brushes in different xaml, it will certainly not work in case of static resource.
This is the reason, unless the other resources of type xaml is included in the form of some sort of import at a time of complile in same file, you can not use static resource in the file. It simply means that the file/component/control's actual xaml some how should contain actual reference of static resource you use. Now I have my doubt of why DynamicResource will not work, that is because probably DynamicResource will only look in the Application's (where the control is use) ResourceDictionary but not generic.xaml.
I am not 100% sure but I feel if you define a custom control and if you use DynamicResource then your resources has to be in the Application's Resource Dictionary or the parent container of your control's resource dictionary, but it can not be in generic.xaml. Because DynamicResource will only look up for keys in the logical tree of control's runtime and thats why it may not find resources that are in generic. Xaml unless generic.
Xaml is explicitly added in Application.Resources. Summary: StaticResource must be available lexically before in the same file at compile time, resources will be available in Application. Resources dictionary, it still can find in logical tree but at a compile time only in the same dll or same generic.xaml.
DynamicResource must will be searched in Application. Resources and in the logical tree of the control at runtime. For more reference, please check Resources Overview.
Thanks for the answer, even if I don't feel it is any good :), but the thing is this: in order to access a resource defined in a theme, one must use a ComponentResourceKey. Simplifying the problem, I get to define a resource in the theme with a ComponentResourceKey defined using a type in another assembly, and then I can't find the resource using FindResource. Using a type from the same assembly as the theme file, I get to find the resource.
– Siderite Aug 21 '10 at 12:33 I feel this is related to some sort of assembly loading order, but how can you not load an assembly if you are trying to find a resource using a type from that assembly? – Siderite Aug 21 '10 at 12:34 If resource x is in generic. Xaml, even if it is loaded and in memory, dynamic resource will not find it, it will only find in the resource dictionaries of its own logical parental tree.
Dynamic Resource loading uses FindResource but StaticResource does not use FindResource method instead resource references are set at time of compilation. – Akash Kava Aug 21 '10 at 12:58 Ok, I understand that. The question is why did FindResource fail?
I mean, changing the type of the component resource type makes it either fail of succeed. Why is that? – Siderite Aug 21 '10 at 13:44.
Finally fixed it. It appears that having the type for the component resource key in another assembly caused the whole issue. Let me summarize: there is a resource class that holds the ComponentResourceKeys as static properties.
The type used in the constructor of the resource keys is the type of this class. This is in the Resources assembly. There is a theme for the custom controls in another assembly, the Controls assembly, that defines some brushes using as key the properties of the resource class: {x:Static Namespace:ResourceClass.
ResourceKeyProperty} in the same theme, templates for controls use the brushes as dynamic resources: {DynamicResource {x:Static Namespace:ResourceClass. ResourceKeyProperty}} there is also an application that uses these controls and that dynamically adds custom brushes in the application resources. These brushes have the same keys as the ones in the theme.
The end result for this is: the controls do not use the brushes initially the controls do use the brushes added in the application resources the controls use the brushes initially if StaticResource is used in the theme, but then the application resources are ignored The solution for this seems to be to move the resources class in the controls library. As I still do not know why this is happening, this question remains open, even if slightly changed: why doesn't it work in the first scenario?
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.