2010-09-23 8 views
5

que definir aspecto personalizado para el control de botón en el diccionario de recursos:WPF - Mezcla de estilo definida en el diccionario con el estilo definido en el control de los padres

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style TargetType="Button" x:Key="BaseButtonStyle"> 
    <Setter Property="Background" Value="Blue"/> 
    </Style> 
</ResourceDictionary> 

entonces trato de cambiar el estilo de ventana fueron los botones están situados.

<Window.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Dictionary.xaml"/> 
     <ResourceDictionary> 
     <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Style> 
     </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

En WPF designer tengo lo que esperaba. Botón azul con el texto rojo. Pero en tiempo de ejecución, ambos estilos no se aplican y el botón tiene colores predeterminados. ¿Cómo puedo solucionar esto?

+0

¿Puedes compartir el xaml? –

Respuesta

6

El siguiente funciona. Acabo de mover el Estilo de los MergedDictionaries y lo coloqué en el ResourceDictionary externo.

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Style> 
    </ResourceDictionary> 
</Window.Resources> 

En su XAML original, no estoy seguro de por qué el diseñador fue capaz de hacer correctamente, mientras que el tiempo de ejecución de WPF no lo hizo. El MSDN documentation dice sin embargo que:

Un ResourceDictionary combinado no tiene elementos de recurso definidos dentro de él en el marcado. En cambio, el diccionario fusionado es un ResourceDictionary sin elementos secundarios de marcado definidos (o sin elementos agregados a través del código), pero con un URI especificado para Source.

Podría tener algo que ver con eso.

Cuestiones relacionadas