8

この質問で説明されているように、クラスの背後にあるコードをリソースディクショナリに追加する必要があります。(これは良い習慣ではないことはわかっていますが、リンクされた質問のコメントに基づいて機能するはずです)。x:Class属性を使用してコードを参照しています。

XAML(個別のリソースディクショナリファイル):

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

コード:

using System.Windows;

namespace MyNamespace
{
    public partial class MyStandardResources : ResourceDictionary
    {
        public MyStandardResources()
        {
            InitializeComponent();
        }

        //...
    }
}

これにより、ランタイムパーサー例外が発生します。

パーサーの内部エラー:オブジェクトライター' xClassNotDerivedFromElement '。[行:xxx位置:xxx]System.Windows.Application.LoadComponentにあります。

リソースは、ResourceDictionary.MergedDictionariesタグを使用してApp.xamlに含まれています。

4

3 に答える 3

6

このResourceDictionaryをマージされたディクショナリのソース値として使用しようとしていますか?もしそうなら、それはサポートされていません。xClassNotDerivedFromElementエラーが発生します。これは、奇妙な方法で示されますが、その理由は次のとおりです。Source属性値は、XAMLをクラスではなくXAMLとして参照する方法で変換されます。XAMLパーサーは、プリコンパイルを利用せずにそのXAMLを純粋なロードアクションとして開き、その時点でx:Classを調整することはできません。

于 2010-10-25T22:30:17.133 に答える
5

x:Classは、App.xamlのマージされた辞書に対して制限されています。代わりに、アプリリソースでコードビハインドとして定義されているクラスを使用する必要があります。

<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>
于 2012-08-27T14:31:46.407 に答える
0

リソースディクショナリのコードビハインドを作成すると、xamlへのURIを使用してResourceDictionaryを作成できないようになったのは残念です。

コードビハインドを再度削除しましたが、この質問と回答の回答を使用して、コードでResourceDictionaryを作成しました

基本的には、空を作成し、コードでxamluriにResourceDictionary設定するだけです。Source

私にとって、これは、他の誰もが必要に応じてリソースディクショナリを参照し、「期待される」方法で実行できることを意味するため、より適切に機能しました。

于 2012-11-22T09:41:27.373 に答える