Windowsストアアプリで外部アセンブリからResourceDictionaryを読みだす方法
XAMLで、自分オリジナルのUI作ったりするときとか、リストボックス等の表示方法変えたりするのにスタイルをいじったりしますが、それをまとめるResourceDictionaryがあります。
それをいろんなアプリで使いたいときに、いちいちxamlをコピーしてくるのもありですが、面倒だったり、ちゃんと管理できないと困るので、ライブラリ化してまとめておくと便利ですね
そうしてまとめたライブラリを使う方法は、いろんなブログではこんな感じで書かれていたりします。
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Controls;component/Style.xaml" /> <!-- これと、もしくは↓ --> <ResourceDictionary Source="pack://application:,,,/Controls;component/Style.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Page.Resources>
だったりしますが、WPFやWindows Phoneでは使えても、Windowsストアアプリ(WinRT)では「Failed to assign to property 'Windows.UI.Xaml.ResourceDictionary.Source'. [Line: * Position: *]」とか言われて無理だったりして、
WinRTではできないんじゃないか…と頭を抱えていましたが、Stack Overflowでしっかり書かれていました
API Only - Stack Exchange
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ms-appx:///Controls/Style.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Page.Resources>
つまり、Sourceプロパティは "/Controls;component/Style.xaml"や "pack://application:,,,/Controls;component/Style.xaml" じゃなくて、
"ms-appx:///Controls/Style.xaml" と書きましょうってことですね。