Я пытаюсь понять, как программно применять тему во время выполнения в нашем приложении Silverlight 4. Я полагал, что это должно быть так же просто, как загрузить словарь ресурсов из XAML и слить его с объединенными словарями приложения. Вот мой код до сих пор:Почему XamlReader.Load не может распознать мое прикрепленное свойство в Silverlight 4?
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
поднят во время вызова XamlReader.Load
:
Присоединяемый свойство «Foo» не был найден в тип «Бар».
Это прикрепленная является правильно объявлена, и объявление пространства имен в 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 во время выполнения, когда она работает просто отлично, когда «статически» загружен?