xClassNotDerivedFromElement error when adding Code Behind to Resource Dictionary in silverlight

こ雲淡風輕ζ 提交于 2019-12-04 03:33:25

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.

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>
Martin Lottering

It is a pity that creating the code-behind for a resource dictionary now means you cannot create a ResourceDictionary using the URI to the xaml.

I removed my code-behind again, but still created the ResourceDictionary in code using the answer from this question+and+answer

Basically it just creates an empty ResourceDictionary and setting its Source to the xaml uri in code.

For me, this worked better because it means then that anyone else can still reference the resource dictionary if they wanted to, and do it the 'expected' way.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!