Estoy tratando de averiguar cómo aplicar un tema programáticamente en el tiempo de ejecución en nuestra aplicación Silverlight 4. Pensé que esto debería ser tan simple como cargar un diccionario de recursos de XAML y fusionarlo con los diccionarios fusionados de la aplicación. Aquí está mi código hasta ahora:¿Por qué XamlReader.Load no puede reconocer mi propiedad adjunta en 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);
}
}
Por desgracia, una XamlParseException
se eleva durante la llamada a XamlReader.Load
:
La propiedad acoplable 'Foo' no se ha encontrado en el tipo 'Bar'.
Esta conectado correctamente es declarado adecuadamente, y la declaración de espacio de nombres en el XAML hace referencia correctamente el espacio de nombres necesario. La propiedad adjunta XAML funciona bien si se carga en los diccionarios combinados declarativamente a través del marcado App.xaml.
Aquí es una copia abreviada del XAML, que estoy tratando de cargar en tiempo de ejecución:
<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>
¿Por qué la referencia a los bienes embargados que no trabaja cuando se carga XAML en tiempo de ejecución cuando se está trabajando bien cuando "estáticamente" cargado?