Acabo de cambiar mi aplicación WPF de .Net3.5 a .Net4. Al hacer esto, todos mis estilos globales dejaron de funcionar. Solo los estilos explícitamente establecidos usando una clave funcionaron. Investigué un poco y descubrí qué causa esto, y lo reproduje en una aplicación simple.WPF problema de estilos globales con .Net4
Tengo una aplicación WPF simple que contiene solo un botón con texto, sin estilo o cualquier otra cosa. Defino un estilo para todos los botones en la ResourceDictionary de App.xaml:
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
Mi botón es ahora Red - todo bien. Ahora muevo esto a un ResourceDictionary por separado en un proyecto separado. Aquí es donde quiero guardar todos mis estilos compartidos. El botón está siendo rojo, y mi referencia de App.xaml a SharedStyles.xaml se ve así:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/SharedStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Ahora - Quiero SharedStyles.xaml de StyleLib para contener todas las definiciones de estilo específicos, por lo que crear un nuevo archivo en el mismo proyecto llamado ButtonStyles.xaml, y agrego el recurso allí. En realidad, agrego otro estilo también con una clave para usar de forma explícita (técnicamente lo agregué más tarde, por lo que esto no tiene nada que ver con el problema que ocurre).
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
<Style x:Key="Explicit" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue"></Setter>
</Style>
</ResourceDictionary>
ButtonStyles.xaml está referenciado a partir SharedStyles.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/ButtonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
ahora - mi control botón no está estilizado más. En realidad, todavía se muestra como estilo en la ventana de vista previa en VS2010, pero cuando ejecuto la aplicación no están diseñados. Si explícitamente hago referencia al estilo con la clave "Explícito", obtienen este estilo, por lo que el archivo se incluye con éxito.
Otra cosa graciosa es que si ahora agrego otro estilo en SharedStyle.xaml - por ej. un estilo global para StackPanel (que fue lo que probé) - ¡entonces el estilo global dentro de ButtonStyle.xaml mágicamente comienza a funcionar ...!
Mi pregunta ahora es si estoy haciendo algo mal, o si esto suena como un error en .Net4? Suena como un error para mí ... ¡Funcionó bien en .Net3.5!
Microsoft lo aceptó como un error, así que supongo que no hay nada más que hacer al respecto ... – stiank81