質問

WinFormsからWPF ResourceDictionariesを読み取ることは可能ですか?はいの場合、どのように?

役に立ちましたか?

解決

WPFプロジェクトにリソースディクショナリを追加すると、ビルドアクションが自動的にページに設定されます。これは、コンパイラがBAMLストリームを生成し、それをアセンブリのリソースに追加することを意味します。

WPFにはBAMLストリームを読み取る組み込み機能がありますが、そのAPIはパブリックではないため、リフレクションを介して内部メソッドにアクセスする小さなヘルパークラスを記述する必要があります。

public static class BamlReader
{
    public static object Load(Stream stream)
    {
        ParserContext pc = new ParserContext();
        MethodInfo loadBamlMethod = typeof(XamlReader).GetMethod("LoadBaml", 
            BindingFlags.NonPublic | BindingFlags.Static)
        return loadBamlMethod.Invoke(null, new object[] { stream, pc, null, false });
    }
}

// Usage:
StreamResourceInfo sri = System.Windows.Application.GetResourceStream(
    new Uri("/MyAssemblyName;component/MyResourceDict.xaml", UriKind.Relative));
    ResourceDictionary resources = (ResourceDictionary)BamlReader.Load(sri.Stream);

出典: WinFormsからWPF ResourceDictionariesを読み取る方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top