Monday, August 27, 2012

xClassNotDerivedFromElement error when adding Code Behind to Resource Dictionary in silverlight

xClassNotDerivedFromElement error when adding Code Behind to Resource Dictionary in silverlight

I need to add code behind class to Resource Dictionary as described in this question. (I know that this is not a good practise but it should work based on the comments for linked question) .I'm referencing the code with x:Class attribute:

XAML (separate Resource Dictionary file):

<ResourceDictionary     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     x:Class="MyNamespace.MyStandardResources">     ... </ResourceDictionary> 

CODE:

using System.Windows;  namespace MyNamespace {     public partial class MyStandardResources : ResourceDictionary     {         public MyStandardResources()         {             InitializeComponent();         }          //...     } } 

This causes the runtime parser exception:

Parser internal error: Object writer 'xClassNotDerivedFromElement'. [Line: xxx Position: xxx] at System.Windows.Application.LoadComponent.

The resources are included in App.xaml with ResourceDictionary.MergedDictionaries tag.

Answers & Comments...

Answer: 1

Are you trying to use this ResourceDictionary as a Source value of a merged dictionary? If so, that is not supported. You get that xClassNotDerivedFromElement error, which is a weird way of indicating it, but here's why: the Source attribute value gets translated in a way that references the XAML as XAML, not as a class. The XAML parser opens that XAML as a pure load action without benefit of any precompile, and can't reconcile the x:Class at that time.

by : Wolf Schmidt-MSFThttp://stackoverflow.com/users/436393

Answer: 2

The x:Class is restricted for merged dictionaries in App.xaml. Instead you should use your class defined as code behind in App resources:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"           x:Class="MyNamespace.App"          xmlns:view="clr-namespace:MyNamespace">      <Application.Resources>         <ResourceDictionary>             <ResourceDictionary.MergedDictionaries>                 <view:MyStandardResources />                 ....             </ResourceDictionary.MergedDictionaries>         </ResourceDictionary>     </Application.Resources>  </Application> 
by : Pavel Korsukovhttp://stackoverflow.com/users/956986




No comments:

Post a Comment

Send us your comment related to the topic mentioned on the blog