Silverlight 4 アプリケーションで実行時にテーマをプログラムで適用する方法を見つけようとしています。これは、リソース ディクショナリを XAML から読み込んで、それをアプリケーションのマージされたディクショナリとマージするのと同じくらい簡単なはずだと考えました。これまでの私のコードは次のとおりです。
var themeUri = new Uri(
"OurApp;component/Themes/Classic/Theme.xaml", UriKind.Relative);
var resourceInfo = GetResourceStream(themeUri);
using (var stream = resourceInfo.Stream)
{
using (var reader = new StreamReader(stream))
{
var xamlText = reader.ReadToEnd();
var dict = XamlReader.Load(xamlText) as ResourceDictionary;
Resources.MergedDictionaries.Add(dict);
}
}
残念ながら、XamlParseException
への呼び出し中に a が発生しますXamlReader.Load
:
添付可能なプロパティ 'Foo' がタイプ 'Bar' で見つかりませんでした。
これは適切にアタッチされ、適切に宣言されており、XAML の名前空間宣言は必要な名前空間を正しく参照しています。添付プロパティ XAML は、App.xaml マークアップを介して宣言的にマージされた辞書に読み込まれると、問題なく機能します。
これは、実行時にロードしようとしている XAML の省略されたコピーです。
<ResourceDictionary xmlns:u="clr-namespace:Company.Product.Utils"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ControlPanelStyle" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Grid Margin="0" u:Bar.Foo="True">
<!-- Stuff and things -->
<ContentPresenter Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
「静的に」読み込まれたときに正常に動作しているのに、実行時に XAML を読み込むときに添付プロパティへの参照が機能しないのはなぜですか?